OkHttp3升级实践与之前2.0对比

Okhttp是一个高效的Http客户端,我们公司的app也采用Okhttp。
OKhttp在过年之前更新到了3.0了。3.0相对与之前的2.0变动比较大,不能直接升级版本后就行,现在讲讲我在将OkHttp升级到3.0过程中需要更改的地方,及okhttp3.0 与之前的2.0的对比。

1,包名改变

包名改了由之前的 com.squareup.http.* 改为 okhttp3.*
我们需要将导包名直接换掉,另外记得修改progurad-rules.pro 文件中将对应包名

2,OkHttpClient参数配置

之前参数可以直接mOkHttpClient.setCache(cache)设置,
现在OkHttpClient使用创建者模式,需要在OkHttpClient.Builder上设置可配置的参数如下:

Dispatcher dispatcher; // 分发
Proxy proxy; // 代理
List protocols;
List connectionSpecs;
final List interceptors = new ArrayList<>(); // 拦截器 final List networkInterceptors = new ArrayList<>(); // 网络拦截器 ProxySelector proxySelector;
CookieJar cookieJar;
Cache cache; // 缓存
InternalCache internalCache;
SocketFactory socketFactory;
SSLSocketFactory sslSocketFactory;
HostnameVerifier hostnameVerifier;
CertificatePinner certificatePinner;
Authenticator proxyAuthenticator; // 代理证书
Authenticator authenticator; // 证书
ConnectionPool connectionPool;
Dns dns; // DNS
boolean followSslRedirects;
boolean followRedirects;
boolean retryOnConnectionFailure;
int connectTimeout;
int readTimeout;
int writeTimeout;

例如:

OkHttpClient.Builder okHttpClientBuilder = client.newBuilder(); /* 超时设置 */ okHttpClientBuilder.connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS);

OkHttpClient mOkHttpClient = okHttpClientBuilder.build();

3.Cookie管理

okhttp3 之前用CookieHandler管理cookie

/* cookie管理 */ 
 mCookieHandler = new CookieManager(null, CookiePolicy.ACCEPT_ALL); 
 mOkHttpClient.setCookieHandler(mCookieHandler);
 ```

 3.0 之后新增了两个类Cookiejar、Cookie两个类,开放接口,需要用户自己去实现cookie的配管理。
 用户可以直接在CookieJar中简单设置Cookie的管理,如下:
 ```
okHttpClientBuilder.cookieJar(new CookieJar() {
       private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
             @Override
               public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
                 cookieStore.put(url, cookies);
                }

            @Override
              public List<Cookie> loadForRequest(HttpUrl url) {
                   List<Cookie> cookies = cookieStore.get(url);
                   return cookies != null ? cookies : new ArrayList<Cookie>();
            }
    });

当然网上有更多的比较好的Cookie持久化方案可以采用: [PersistentCookieJar](https://github.com/franmontiel/PersistentCookieJar) ;

Cookies持久化方案,根据一定的规则去缓存或者获取Cookie:

CookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(ctx));
okHttpClientBuilder.cookieJar(cookieJar);

4、 Callback

回调方法Callback在3.0之后在之前的基础上增加参数Call:
void onResponse(Call call, Response response) throws IOException;
用户可以更加随意方便控制call.

5、OkHttpClient的Cancel方法去掉

3.0之前我们去掉call 可以直接使用mOkHttpClient.cancel(tag);
3.0之后直接阉割掉此方法我们可以采用如下方法:

 public void cancelCallsWithTag(Object tag) {
        checkInit();

        if (tag == null) {
            return;
        }

        synchronized (mOkHttpClient.dispatcher().getClass()) {
            for (Call call : mOkHttpClient.dispatcher().queuedCalls()) {
                if (tag.equals(call.request().tag())) call.cancel();
            }

            for (Call call : mOkHttpClient.dispatcher().runningCalls()) {
                if (tag.equals(call.request().tag())) call.cancel();
            }
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值