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

来源:互联网 发布:光子 知乎 编辑:程序博客网 时间:2024/06/18 04:21

在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的封装。

原创粉丝点击