Android Studio網路請求
阿新 • • 發佈:2019-01-05
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;
}
}
};