1.先在項目中添加OkHttp庫的依賴
dependencies{
compile 'com.squareup.okhttp3:okhttp:3.4.1'
}
2.初始化
OkHttp架構的核心類是OkHttpClient,此類可直接執行個體化。由于OkHttpClient内部處理了并發,多線程和Socket重用等問題,為了節省資源,整個應用中使用一個OkHttpClient對象即可,可以對它做Singleton封裝。
OkHttpClient okHttpClient = new OkHttpClient();
3.http請求的建構
3.1GEt請求
代表Http請求的類是Request,該類使用構造器模式,最簡單的構造GET請求如下:
Request request = new Request.Builder() .url(url) .build();
3.2POST請求
要構造Post請求,在建構Request時增加請求體即可:
RequestBody formBody = new FormEncodingBuilder() .add("name", "Cuber") .add("age", "26") .build(); Request request = new Request.Builder() .url(url) .post(RequestBody) .build();
4.http請求的發送
調用OkHttpClient的newCall()方法來建立一個Call對象,并調用它的execute()方法來發送請求并擷取伺服器傳回的資料。
請求的發送有兩種形式,一種是直接同步執行,阻塞調用線程,直接傳回結果;另一種是通過隊列異步執行,不阻塞調用線程,通過回調方法傳回結果。如下所示:
4.1同步執行:
// 如果傳回null,代表逾時或沒有網絡連接配接
Response response = client.newCall(request).execute();
4.2異步回調:
Response response = client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
//逾時或沒有網絡連接配接
//注意:這裡是背景線程!
}
@Override
public void onResponse(Response response) throws IOException {
//成功
//注意:這裡是背景線程!
}
});