1. 程式人生 > >Android Studio網路請求

Android Studio網路請求

XML一個按鈕,用來吐司網路獲取的json資料;
一個網路請求類,用來封裝兩個方法一個是判斷網路,一個是請求的型別(GET));

public static boolean isNetWork(Context context) {
        if (context != null) {
        //獲取管理器
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = connectivityManager.getActiveNetworkInfo();
            if (info != null) {
				//返回 網路可用
                return info.isAvailable();
            }

        }
        //網路不可用
        return false;
    }

上面是判斷網路,返回網路的狀態;
這個是請求的型別還有,一些設定 拼接字串;

public static String HttpGet(String strUrl){
        try {
        	//呼叫方法時,輸入的介面
            URL url = new URL(strUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
           //設定為get請求
            connection.setRequestMethod("GET");
            //設定連線主機超時時間
            connection.setConnectTimeout(5000);
            //設定從主機讀取資料超時
            connection.setReadTimeout(5000);

            int code = connection.getResponseCode();
			//獲取請求碼 200 300 400 404等 200是網路成功
            if (code == 200) {
            //字串拼接 可以用其他方法
                InputStream inputStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
                StringBuffer buffer = new StringBuffer();
                String str = "";
                while ((str = reader.readLine()) != null) {
                    buffer.append(str);
                }
                //返回拼接的字串
                return buffer.toString();
            }
            //釋放connection佔用的記憶體
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

在這裡插入圖片描述
這裡如果沒有許可權會報錯;

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

這個方法類,我們已經寫好了,下面是按鈕點選要開啟一個執行緒

new Thread(){
                @Override
                public void run() {
                    super.run();
                    //在這裡寫耗時操作(請求網路資料)
                    boolean networkConnected = Http.isNetworkConnected(MainActivity.this);
                    //判斷有沒有網
                    if (networkConnected){
                        //有網就請求資料
                        // 雙引號是介面的地址 寫好Bean類
                        String get = Http.requestHttpGet("");
                        //Gson解析 記得導包
                        Gson gson=new Gson();
                        JsonBean bean = gson.fromJson(get, JsonBean.class);
                        //把資料傳遞給主執行緒
                        Message message=new Message();
                        message.what=0;
                        message.obj=bean;
                        handler.sendMessage(message);
                    }else{
                       handler.sendEmptyMessageDelayed(1,0);
                    }

                }
                //注意 執行緒啟動
            }.start();

Handler

Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        switch (msg.what){
            case 0:
                JsonBean bean= (JsonBean) msg.obj;
                Toast.makeText(MainActivity.this,""+bean.toString(),Toast.LENGTH_LONG).show();

                break;
            case 1:
                //沒網就提示使用者 沒網
                Toast.makeText(MainActivity.this,"沒網",Toast.LENGTH_LONG).show();
                break;
        }
        }
    };