《Android》『HttpClient』- 如何透過 HttpClient 接收伺服器資料
《Android Developers 參考文獻》
《簡單介紹》
HttpClient 與 HttpURLConnection 都是用來實作 Http 連線的類別,差別在於 HttpClient 只支援到 Android 6.0 (API level 23) ,在之後的版本,Google 不再維護 HttpClient,改為建議使用 HttpURLConnection 來替換,這邊首先針對HttpClient 類別介紹其使用方式,以及簡單介紹 URL 網址的基本結構。
《HttpClient 的使用方式》
透過 HttpClient,我們可以對伺服器執行 HTTP GET 與 HTTP POST 的調用,這兩種調用的差異在於 message-body 的有無,GET 就像是明信片,只能在 http-header (Header Params)與 URL 網址後面加上要傳遞的訊息(Query Params),而 POST 就像是帶有信紙的信封,多了 message-body 可以置入想要寄送的資料或檔案。
我們在跟伺服器請求資料時,通常會附帶一些資訊,以讓伺服器知道要回傳給我們哪些資料。
以下介紹 HttpClient 在程式碼中使用的方式 –
1. 在 AndroidManifest.xml 文件中添加網路權限。
1 |
<uses-permission android:name="android.permission.INTERNET" /> |
2. 使用 DefaultHttpClient 類別實作 HttpClient 物件。
1 |
HttpClient client = new DefaultHttpClient(); |
3. 創建 HttpGet 或 HttpPost 物件,將請求的 URL 網址通過建構子傳入 HttpGet 或 HttpPost 物件。
1 2 3 |
HttpGet get = new HttpGet("網址" + "?" + "deviceType=" + "type01" + "&androidVersion=" + "1.0" + "&firmwareVersion=" + "2.0"; |
這邊要注意的是,網址有時會帶有兩種參數,分別是 Header Params 以及 Query Params,其中 Query Params 是指直接加在網址後面,以?開頭並以&做每個參數的區分,Header Params 則須在下一個步驟做加入。
4. 調用 HttpGet 或 HttpPost 物件的 addHeader 函式,視 API 定義加入所需的 Header Params。
1 2 3 |
get.addHeader("Accept","application/json"); get.addHeader("APIKey","eddeewee-a9dc-1fr3-bfr0-asj1ejdieudj"); get.addHeader("Content-Type","application/json"); |
5. 調用 HttpClient 物件的 execute 函式,發送 HTTP GET 或 HTTP POST 請求,並回傳給 HttpResponse 物件。
1 |
HttpResponse response = client.execute(get); |
6. 通過HttpResponse 接口的 getEntity 方法取得伺服器回應的訊息,並進行相應的處理。
1 2 |
HttpEntity resEntity = response.getEntity(); String result = EntityUtils.toString(resEntity); |
完整程式碼範例如下 –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
... HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(NabiHttpRequest.getCheckAPKUpdateSite(context) + "?" + "deviceType=" + "type01" + "&androidVersion=" + "1.0" + get.addHeader("Accept","application/json"); get.addHeader("APIKey","ebd6feef-avbe-1ew3-b490-244wefhtvxwe6"); get.addHeader("Content-Type","application/json"); try{ HttpResponse response = client.execute(get); HttpEntity resEntity = response.getEntity(); result = EntityUtils.toString(resEntity); } catch(Exception ex){ Log.d("message", "Exception : " + ex); } ... |
HttpClient 實作 HTTP GET 讀取伺服器資料
這篇介紹完如何透過 HttpClient 實作 HTTP 之請求,下一篇將再來探討 HttpURLConnection 的使用方式。
臉書留言
一般留言