參考和轉載地址:
參考文章地址:OkHttp基礎概念解釋
轉載文章地址:Okhttp3基本使用
官方地址 https://github.com/square/okhttp
簡介OKHTTP
1. 優勢
-
支持HTTP2/SPDY,如果SPDY不可用,則通過連接池來減少請求延時
-
socket自動選擇最好路線,並支持自動重連,擁有自動維護的socket連接池,減少握手次數,減少了請求延遲,共享Socket,減少對服務器的請求次數
-
基於Headers的緩存策略減少重複的網絡請求
-
擁有Interceptors輕鬆處理請求與響應(自動處理GZip壓縮),減少了下載大小
-
當網絡出現問題時,OkHttp 會自動重試一個主機的多個 IP 地址
-
使用簡單,支持同步阻塞調用和帶回調的異步調用
2. 使用
2.1 添加依賴和權限
最新版本,可以進入官網查看。
implementation 'com.squareup.okhttp3:okhttp:3.13.1'
<uses-permission android:name="android.permission.INTERNET" />
2.2 Get同步請求:
Response response = call.execute();
2.3 Get異步請求
String url = "http://wwww.baidu.com";
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url(url)
.get()//默認就是GET請求,可以不寫
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, IOException e) {
LogUtils.e(TAG, "onFailure: ");
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
String content = response.body().string();
LogUtils.i(TAG, "onResponse: " + content);
}
});
注:response.body().string(); 只能調用一次,再次調用不會再有返回結果,所以需要緩存一下。
2.4 Post請求
post請求和get請求的區別就是,post請求需要構建一個傳參的RequestBody,RequestBody需要指定MediaType,用於描述請求/響應 body 的內容類型。