1. 程式人生 > >零碎*學習安卓開發——使用網咯技術

零碎*學習安卓開發——使用網咯技術

優點 深入 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基本步驟:

  1. 通過URL.openConnection()方法獲取HttpURLConnection實例。
  2. 設置請求方法(get或post)。
  3. 設置請求屬性。
  4. 獲取數據、寫出數據。
  5. 關閉各種流,利用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對象的目標地址和傳出的數據
  1. 創建一個OkHttpClient實例
  2. 創建request
  3. 創建response
  4. 獲取返回的響應體或響應頭信息

解析數據

XML使用較少,先跳過學習

解析JSON格式數據

JSON相比於XML,優點在於體積更小,缺點在於語義性較差,不直觀。

零碎*學習安卓開發——使用網咯技術