okhttp3相关封装配置(一):OkHttpClient的参数配置
2017-11-28 17:56
666 查看
在Android开发框架中,比较重要的一个模块,就是网络请求模块。一个封装比较好的网络请求框架,会让开发者在发送请求和处理回调都十分方便。这篇文章就围绕着使用比较广泛的okhttp3来写,声明一下,本人不是大神,所以封装的并不完善,只是想给大家共享一下这个小小的成果。
我打算写3篇文章来介绍我是怎么封装okhttp3这个框架的,就是围绕着OkHttpClient, request, callback这三个主题来写。
本篇文章来配置OkHttpClient
废话不多说,OkHttpClient是通过OkHttpClient.Builder来配置参数的。
先来配置比较基础的参数,看代码:
超时时间限制以及是否允许重定向,这个根据你项目的需要自行修改。
接下来配置的稍微有些复杂,不过在网上也可以找到很多资源,就是添加https的支持,看代码:
我支持所有https请求,如果服务端有特殊要求,需要根据服务端来进行相应的配合和联调。HttpsUtils是我自己封装的工具类,其实就一个普通的Java类,initSSLSocketFactory()和initTrustManager()是两个静态方法,如果你的项目没什么特殊要求,就按照我的写就行,看代码:
配置了这些之后,基本上就可以生成OkHttpClient来使用了,就我们这个builder来生成,看代码:
在此说明一下,生成OkHttpClient这个步骤,执行一次就行了,所以大家要么选择单例模式,要么写在静态代码块中。
通过OkHttpClient来发送请求也很简单,通过调用newCall()方法,传入request对象就行,至于是get方法还是post方法,是通过对request对象的配置来决定的,看代码:
调用newCall()方法后,会返回一个call对象,调用这个对象的enqueue()方法传入callback,就可以添加回调了。
为什么要返回这个call对象?
我相信大家在开发的时候都遇到过这种情况,请求没有返回的时候,就点击返回键将Activity销毁了。
通过返回的call对象,我们可以在Activity的onDestroy()方法中写上call.cancel(),顾名思义,这样我们就可以自己取消这个请求了。
后续我会分别针对request和callback再进行进一步的封装和配置,最终实现一套完整的针对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的封装。
相关文章推荐
- OkHttpClient带多个参数的get请求
- 轻松把玩HttpClient之封装HttpClient工具类(六),封装输入参数,简化工具类
- 轻松把玩HttpClient之封装HttpClient工具类(六),封装输入参数,简化工具类
- OkHttp3源码(一) ------ OkHttpClient
- 优雅设计封装基于Okhttp3的网络框架(一):Http网络协议与Okhttp3解析
- HttpClient 4.3连接池参数配置及源码解读
- 轻松把玩HttpClient之封装HttpClient工具类(六),封装输入参数,简化工具类
- OkHttpClient使用相关
- HttpClient 4.3连接池参数配置及源码解读_0
- OkHttpClient 基础方法封装
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- 二次封装OKhttpClient和使用
- Android封装OkHttpClient的类库
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- HttpServletRequestWrapper采用装饰模式重新封装request,并打印request请求相关参数。
- okhttp3相关封装配置(三):Callback封装,添加onStart()和onFinish()回调方法
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- HttpClient 4.3连接池参数配置及源码解读
- 轻松把玩HttpClient之封装HttpClient工具类(二),插件式配置HttpClient对象
- NoClassDefFoundError: okhttp3.OkHttpClient$Builder