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 {
//成功
//注意:這裏是後臺線程!
}
});