Android第三方HTTP網(wǎng)絡(luò)支持包OkHttp的基礎(chǔ)使用教程
OkHttp 包的設(shè)計和實現(xiàn)的首要目標是高效。這也是選擇 OkHttp 的重要理由之一。OkHttp 提供了對最新的 HTTP 協(xié)議版本 HTTP/2 和 SPDY 的支持,這使得對同一個主機發(fā)出的所有請求都可以共享相同的套接字連接。如果 HTTP/2 和 SPDY 不可用,OkHttp 會使用連接池來復(fù)用連接以提高效率。OkHttp 提供了對 GZIP 的默認支持來降低傳輸內(nèi)容的大小。OkHttp 也提供了對 HTTP 響應(yīng)的緩存機制,可以避免不必要的網(wǎng)絡(luò)請求。當網(wǎng)絡(luò)出現(xiàn)問題時,OkHttp 會自動重試一個主機的多個 IP 地址。
(OkHttp的GitHub主頁:https://github.com/square/okhttp)
HTTP 客戶端所要執(zhí)行的任務(wù)很簡單,接受 HTTP 請求并返回響應(yīng)。每個 HTTP 請求包括 URL,HTTP 方法(如 GET 或 POST),HTTP 頭和請求的主體內(nèi)容等。HTTP 請求的響應(yīng)則包含狀態(tài)代碼(如 200 或 500),HTTP 頭和響應(yīng)的主體內(nèi)容等。雖然請求和響應(yīng)的交互模式很簡單,但在實現(xiàn)中仍然有很多細節(jié)要考慮。OkHttp 會對收到的請求進行一定的處理,比如增加額外的 HTTP 頭。同樣的,OkHttp 也可能在返回響應(yīng)之前對響應(yīng)做一些處理。例如,OkHttp 可以啟用 GZIP 支持。在發(fā)送實際的請求時,OkHttp 會加上 HTTP 頭 Accept-Encoding。在接收到服務(wù)器的響應(yīng)之后,OkHttp 會先做解壓縮處理,再把結(jié)果返回。如果 HTTP 響應(yīng)的狀態(tài)代碼是重定向相關(guān)的,OkHttp 會自動重定向到指定的 URL 來進一步處理。OkHttp 也會處理用戶認證相關(guān)的響應(yīng)。
如何使用
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 使用調(diào)用(Call)來對發(fā)送 HTTP 請求和獲取響應(yīng)的過程進行抽象。下面代碼中給出了使用 OkHttp 發(fā)送 HTTP 請求的基本示例。首先創(chuàng)建一個 OkHttpClient 類的對象,該對象是使用 OkHttp 的入口。接著要創(chuàng)建的是表示 HTTP 請求的 Request 對象。通過 Request.Builder 這個構(gòu)建幫助類可以快速的創(chuàng)建出 Request 對象。這里指定了 Request 的 url 為 http://www.baidu.com。接著通過 OkHttpClient 的 newCall 方法來從 Request 對象中創(chuàng)建一個 Call 對象,再調(diào)用 execute 方法來執(zhí)行該調(diào)用,所得到的結(jié)果是表示 HTTP 響應(yīng)的 Response 對象。通過 Response 對象中的不同方法可以訪問響應(yīng)的不同內(nèi)容。如 headers 方法來獲取 HTTP 頭,body 方法來獲取到表示響應(yīng)主體內(nèi)容的 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("服務(wù)器端錯誤: " + 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的基礎(chǔ),我們直接順便來看POST:
builde Requestbody RequestBody 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或沒有網(wǎng)絡(luò)
Response response = client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { //timeout或 沒有網(wǎng)絡(luò) //注意!這里是backgroundThread } @Override public void onResponse(Response response) throws IOException { //成功 //注意!這里是backgroundThread } });
- Android使用okHttp(get方式)下載圖片
- 詳解Android中使用OkHttp發(fā)送HTTP的post請求的方法
- Android中Retrofit+OkHttp進行HTTP網(wǎng)絡(luò)編程的使用指南
- Android M(6.x)使用OkHttp包解析和發(fā)送JSON請求的教程
- 使用Android的OkHttp包實現(xiàn)基于HTTP協(xié)議的文件上傳下載
- Android的HTTP擴展包OkHttp中的緩存功能使用方法解析
- Android App開發(fā)中HTTP擴展包OkHttp的入門使用指南
- Android中使用OkHttp包處理HTTP的get和post請求的方法
- Android中的Retrofit+OkHttp+RxJava緩存架構(gòu)使用
- android okhttp的基礎(chǔ)使用【入門推薦】
相關(guān)文章
Android開發(fā)之ViewSwitcher用法實例
這篇文章主要介紹了Android開發(fā)之ViewSwitcher用法,結(jié)合實例形式分析了ViewSwitcher的功能、使用方法與相關(guān)注意事項,需要的朋友可以參考下2016-02-02Android TraceView和Lint使用詳解及性能優(yōu)化
這篇文章主要介紹了Android TraceView和Lint使用詳解及性能優(yōu)化的相關(guān)資料,需要的朋友可以參考下2017-03-03Android ExpandableListView雙層嵌套實現(xiàn)三級樹形菜單
這篇文章主要介紹了Android ExpandableListView雙層嵌套實現(xiàn)三級樹形菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11Android Flutter實現(xiàn)3D動畫效果示例詳解
在Flutter中提供了AnimatedWidget組件用于構(gòu)建可復(fù)用的動畫組件。本文我們用AnimatedWidget來實現(xiàn)組件的3D旋轉(zhuǎn)效果,感興趣的可以了解一下2022-03-03