天天看點

Android中OkHttp的使用(詳解)

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 {

//成功

//注意:這裡是背景線程!

}

});