国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android第三方HTTP網絡支持包OkHttp的基礎使用教程

2019-12-12 06:01:36
字體:
來源:轉載
供稿:網友

OkHttp 包的設計和實現的首要目標是高效。這也是選擇 OkHttp 的重要理由之一。OkHttp 提供了對最新的 HTTP 協議版本 HTTP/2 和 SPDY 的支持,這使得對同一個主機發出的所有請求都可以共享相同的套接字連接。如果 HTTP/2 和 SPDY 不可用,OkHttp 會使用連接池來復用連接以提高效率。OkHttp 提供了對 GZIP 的默認支持來降低傳輸內容的大小。OkHttp 也提供了對 HTTP 響應的緩存機制,可以避免不必要的網絡請求。當網絡出現問題時,OkHttp 會自動重試一個主機的多個 IP 地址。
(OkHttp的GitHub主頁:https://github.com/square/okhttp)
HTTP 客戶端所要執行的任務很簡單,接受 HTTP 請求并返回響應。每個 HTTP 請求包括 URL,HTTP 方法(如 GET 或 POST),HTTP 頭和請求的主體內容等。HTTP 請求的響應則包含狀態代碼(如 200 或 500),HTTP 頭和響應的主體內容等。雖然請求和響應的交互模式很簡單,但在實現中仍然有很多細節要考慮。OkHttp 會對收到的請求進行一定的處理,比如增加額外的 HTTP 頭。同樣的,OkHttp 也可能在返回響應之前對響應做一些處理。例如,OkHttp 可以啟用 GZIP 支持。在發送實際的請求時,OkHttp 會加上 HTTP 頭 Accept-Encoding。在接收到服務器的響應之后,OkHttp 會先做解壓縮處理,再把結果返回。如果 HTTP 響應的狀態代碼是重定向相關的,OkHttp 會自動重定向到指定的 URL 來進一步處理。OkHttp 也會處理用戶認證相關的響應。

如何使用
1.gradle

compile 'com.squareup.okhttp:okhttp:2.4.0'

2.Initial
建議只要new一個實體做全部的操作就行了

okHttpClient = new OkHttpClient();okHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);okHttpClient.setReadTimeout(30, TimeUnit.SECONDS);

3.GET
OkHttp 使用調用(Call)來對發送 HTTP 請求和獲取響應的過程進行抽象。下面代碼中給出了使用 OkHttp 發送 HTTP 請求的基本示例。首先創建一個 OkHttpClient 類的對象,該對象是使用 OkHttp 的入口。接著要創建的是表示 HTTP 請求的 Request 對象。通過 Request.Builder 這個構建幫助類可以快速的創建出 Request 對象。這里指定了 Request 的 url 為 http://www.baidu.com。接著通過 OkHttpClient 的 newCall 方法來從 Request 對象中創建一個 Call 對象,再調用 execute 方法來執行該調用,所得到的結果是表示 HTTP 響應的 Response 對象。通過 Response 對象中的不同方法可以訪問響應的不同內容。如 headers 方法來獲取 HTTP 頭,body 方法來獲取到表示響應主體內容的 ResponseBody 對象。
OkHttp 最基本的 HTTP 請求

public class SyncGet {  public static void main(String[] args) throws IOException {  OkHttpClient client = new OkHttpClient();  Request request = new Request.Builder()      .url("http://www.baidu.com")      .build();  Response response = client.newCall(request).execute();  if (!response.isSuccessful()) {    throw new IOException("服務器端錯誤: " + response);  }  Headers responseHeaders = response.headers();  for (int i = 0; i < responseHeaders.size(); i++) {    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));  }  System.out.println(response.body().string());  }}

4.POST
有了上面GET的基礎,我們直接順便來看POST:

builde RequestbodyRequestBody formBody = new FormEncodingBuilder()  .add("name", "Cuber")  .add("age", "26")  .build();Request request = new Request.Builder()   .url(url)   .post(RequestBody)   .build();

5.Send
把上面build出來的Request帶進來

Response response = client.newCall(request).execute();//如果response回傳是null, 就代表timeout或沒有網絡

或是你想使用Callback...
Response response = client.newCall(request).enqueue(new Callback() {  @Override  public void onFailure(Request request, IOException e) {    //timeout或 沒有網絡     //注意!這里是backgroundThread  }  @Override    public void onResponse(Response response) throws IOException {    //成功    //注意!這里是backgroundThread  }});

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 抚顺市| 宜城市| 东乡| 旌德县| 广水市| 武清区| 易门县| 龙井市| 通江县| 孝义市| 八宿县| 左权县| 正镶白旗| 云梦县| 任丘市| 永新县| 乃东县| 丽水市| 闸北区| 贺兰县| 赤水市| 三门县| 仙桃市| 扬中市| 楚雄市| 蒙阴县| 安徽省| 永福县| 扶余县| 鄢陵县| 五华县| 上思县| 六安市| 城口县| 昆山市| 巴塘县| 德保县| 同仁县| 石楼县| 密云县| 理塘县|