1. 程式人生 > >okhttp3相關封裝配置(一):OkHttpClient的引數配置

okhttp3相關封裝配置(一):OkHttpClient的引數配置

在Android開發框架中,比較重要的一個模組,就是網路請求模組。一個封裝比較好的網路請求框架,會讓開發者在傳送請求和處理回撥都十分方便。這篇文章就圍繞著使用比較廣泛的okhttp3來寫,宣告一下,本人不是大神,所以封裝的並不完善,只是想給大家共享一下這個小小的成果。

我打算寫3篇文章來介紹我是怎麼封裝okhttp3這個框架的,就是圍繞著OkHttpClient, request, callback這三個主題來寫。

本篇文章來配置OkHttpClient

廢話不多說,OkHttpClient是通過OkHttpClient.Builder來配置引數的。

OkHttpClient.Builder
okHttpBuilder = new OkHttpClient.Builder();

先來配置比較基礎的引數,看程式碼:

        okHttpBuilder.connectTimeout(TIME_OUT, TimeUnit.SECONDS);
        okHttpBuilder.readTimeout(TIME_OUT, TimeUnit.SECONDS);
        okHttpBuilder.writeTimeout(TIME_OUT, TimeUnit.SECONDS);
        //允許請求重定向,預設是true
        okHttpBuilder.followRedirects
(true);

超時時間限制以及是否允許重定向,這個根據你專案的需要自行修改。
接下來配置的稍微有些複雜,不過在網上也可以找到很多資源,就是新增https的支援,看程式碼:

        okHttpBuilder.hostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String s, SSLSession sslSession) {
                //支援所有型別https請求
                return true
; } }); okHttpBuilder.sslSocketFactory(HttpsUtils.initSSLSocketFactory(),HttpsUtils.initTrustManager());

我支援所有https請求,如果服務端有特殊要求,需要根據服務端來進行相應的配合和聯調。HttpsUtils是我自己封裝的工具類,其實就一個普通的Java類,initSSLSocketFactory()和initTrustManager()是兩個靜態方法,如果你的專案沒什麼特殊要求,就按照我的寫就行,看程式碼:

    public static SSLSocketFactory initSSLSocketFactory() {
        //2.生成SSLContext(加密上下文)
        SSLContext sslContext = null;
        try {
            sslContext = SSLContext.getInstance("SSL"); //與伺服器保持一致,SSL演算法或者TSL演算法。
            X509TrustManager[] xTrustArray = new X509TrustManager[]
                    {initTrustManager()};
            sslContext.init(null,
                    xTrustArray, new SecureRandom());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sslContext.getSocketFactory();
    }
    public static SSLSocketFactory initSSLSocketFactory() {
        //2.生成SSLContext(加密上下文)
        SSLContext sslContext = null;
        try {
            sslContext = SSLContext.getInstance("SSL"); //與伺服器保持一致,SSL演算法或者TSL演算法。
            X509TrustManager[] xTrustArray = new X509TrustManager[]
                    {initTrustManager()};
            sslContext.init(null,
                    xTrustArray, new SecureRandom());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sslContext.getSocketFactory();
    }

配置了這些之後,基本上就可以生成OkHttpClient來使用了,就我們這個builder來生成,看程式碼:

mOkHttpClient = okHttpBuilder.build();

在此說明一下,生成OkHttpClient這個步驟,執行一次就行了,所以大家要麼選擇單例模式,要麼寫在靜態程式碼塊中。

通過OkHttpClient來發送請求也很簡單,通過呼叫newCall()方法,傳入request物件就行,至於是get方法還是post方法,是通過對request物件的配置來決定的,看程式碼:

Call call = mOkHttpClient.newCall(request);
call.enqueue(callback);
return call;

呼叫newCall()方法後,會返回一個call物件,呼叫這個物件的enqueue()方法傳入callback,就可以添加回調了。

為什麼要返回這個call物件?
我相信大家在開發的時候都遇到過這種情況,請求沒有返回的時候,就點選返回鍵將Activity銷燬了。
通過返回的call物件,我們可以在Activity的onDestroy()方法中寫上call.cancel(),顧名思義,這樣我們就可以自己取消這個請求了。

後續我會分別針對request和callback再進行進一步的封裝和配置,最終實現一套完整的針對OkHttp3的封裝。