簡介
OkHttp是Square出的Http通訊庫,支持HTTP和HTTP/2,用於Android應用和Java應用。
OkHttp是非常優秀的Http通訊庫,將Http連接中各種繁雜的問題,對併發的支持,對常見異常的處理等封裝在底層,提供簡單易用的API供應用中調用。與之相比,HttpUrlConnection
的使用過於複雜,Appache的HttpClient
在Android平臺上的運行又有各種問題,在Android
6.0之後,已經將HttpClient
庫從SDK中刪除,全面轉向使用OkHttp。
目前有很多知名的Android三方框架都使用OkHttp
作爲網絡連接的默認基棧,例如Volley,Glide,Retrofit等,從中也能看出學習OkHttp的必要性。
快速上手
在項目中添加對OkHttp的依賴
在需要使用OkHttp的模塊的build.gradle文件中,添加如下依賴:(版本號可能變更)
compile 'com.squareup.okhttp3:okhttp:3.2.0'
初始化
okhttp中的核心類是okhttpclient,並且okhttp中內部處理了線程併發問題,故此我們重用了一個okhttpclient對象就足以實現網絡請求了,爲了節省資源,我們可以實現一個單例對象,可以對它做Singleton封裝。
OkHttpClient okHttpClient = new OkHttpClient();
Http請求的構建
Request request = new Request.Builder()
.url(url)
.build();
如果我們使用的是post請求,傳送數據到服務器需要請求體,那麼我們使用ResquestBody類來構建我們的請求體,並且也可以使用構造器進行構建。RequestBody requestBody = new FormBody.Builder()
.add("name","12345")
.add("password","123456")
.build();
Request request = new Request.Builder()
.url(url)
.post(RequestBody)
.build();
Http請求的發送
okhttp中發送請求的方式有兩種,一種是同步執行,這種方式可以直接拿到返回值,但是會造成線程阻塞,所以一般我們不推薦使用。第二種是
同步執行:
Response response = client.newCall(request).execute();
異步回調:
Response response = client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
//超時或沒有網絡連接
//注意:這裏是後臺線程!
}
@Override
public void onResponse(Response response) throws IOException {
//成功時候拿到響應體
//注意:這裏是後臺線程!
}
});
我們可以通過回調方法返回的響應體來得到我們需要的數據response.body();
以上呢就是我使用okhttp基本步奏。如有問題,請大家多多指正,謝謝!!!