零碎*學習安卓開發——使用網咯技術
阿新 • • 發佈:2019-02-05
優點 深入 execute seda send 讀取流 imp ack 構建
WebView
可以在應用程序中嵌入一個瀏覽器,可以不跳轉到瀏覽器應用展示網頁。
WebView webView = (WebView)findByViewId(); webView.getSettings().setJavaScriptEnabled(true); //設置一些瀏覽器屬性 webView.setWebViewClient(new WebViewClient()); webView.loadUrl("http://www.baidu.com");
本控件訪問了網絡,需要申請權限:INTERNET
使用HTTP協議訪問網絡
WebView已經在後臺已經對發送HTTP請求、接受服務響應、解析返回數據、展示頁面進行了封裝。且WebView還有很多更高級的用法,《第一行代碼》不做深入探討。
Android6.0拋棄HttpClient後,發送HTTP請求則剩下使用HttpURLConnection。
private void sendRequestWithHttpURLConnection(){ //發送HTTP請求的方法 new Thread(new Runnable(){ //開啟一個子線程用於發送Http請求 public void run(){ HttpURLConnection connection = null; NifferedReader reader = null;try{ URL url = new URL("https://www.baidu.com"); //設置URL對象 connection = (HTttpURLConnection)url.openConnection(); //獲取HttpURLConnection實例 connection.setRequestMethod("GET"); //設置請求方法 connection.setConnectTimeout(8000); //設置連接超時 connection.setReadTimeout(8000); //設置讀取超時,還可以設置希望得到的消息頭等 InputStream in = connection.getInputStream(); //調用getInputStream獲取返回的輸入流 reader = new BufferedReader(new InputStreamReader(in)); //對輸入流讀取 StringBuilder reponse = new StringBuilder(); String line; while((line = read.readLine()) != null){ reponse.append(line); } catch(Exception e){ e.printStackTrace(); } finally{ if(reader != null){ try{ reader.close(); //關閉讀取流 } catch(IOException e){ e.printStackTrace(); } } if(connection != null){ connection.disconnect(); //在finally中將connection鏈接關閉 } } } }).start(); //開啟線程 }
在子線程中要進行UI操作需要切換到主線程,使用runOnUiThread()方法。
通過HTTP提交數據給服務器:
connection.setRequestMethod("POST"); DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.writeBytes("username=admin&password=123456"); //通過鍵值對形式,用&分割
使用HttpURLConnection基本步驟:
- 通過URL.openConnection()方法獲取HttpURLConnection實例。
- 設置請求方法(get或post)。
- 設置請求屬性。
- 獲取數據、寫出數據。
- 關閉各種流,利用HttpURLConnection.disconnect()關閉。
使用其他開源網絡通信庫代替原生的HttpURLConnection
OkHttp
接口封裝簡單易用,底層實現自成一派,已成為廣大Android開發者首選的網絡通信庫。主頁地址:https://github.com/square/okhttp
添加依賴
...
implementation ‘com.squqreup.okhttp3:okhttp:3.4.1‘ //最新版本號在主頁上查看
...
具體用法
OkHttpClient client = new OkHttpClient(); //創建一個OkHttpClient實例 Request request = new Request.Builder().[連綴][連綴].build(); //創建一個Request對象以發起Http請求 Response response = client.newCall(request).execute(); //調用OkHttpClient的newCall()方法創建一個Call對象,並調用其execute()方法來發送請求並獲取服務器返回的數據 String responseData = response.body().string(); //獲取返回的數據 //發起POST請求比GET復雜,需要先構建一個RequestBody對象來存放待提交的參數 RequestBody requestBody = new FormBody.Builder().[][]build(); //連綴可使用add()方法添加鍵值對參數 Request request = new Request.Builder().[][].buid(); //連綴加入url("http://xxx")和post(requestBody)方法可以設置Request對象的目標地址和傳出的數據
- 創建一個OkHttpClient實例
- 創建request
- 創建response
- 獲取返回的響應體或響應頭信息
解析數據
XML使用較少,先跳過學習
解析JSON格式數據
JSON相比於XML,優點在於體積更小,缺點在於語義性較差,不直觀。
零碎*學習安卓開發——使用網咯技術