安卓android網絡框架okhttp介紹及使用

簡介

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請求的構建
okhttp中請求類是Resquest,我們可以使用其構造器來進行構建。
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基本步奏。如有問題,請大家多多指正,謝謝!!!


發佈了24 篇原創文章 · 獲贊 24 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章