您的位置:首页 > 理论基础 > 计算机网络

okhttp3相关封装配置(一):OkHttpClient的参数配置

2017-11-28 17:56 666 查看
在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的封装。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息