okhttp3相关封装配置(二):Request对象

在Android开发框架中,比较重要的一个模块,就是网络请求模块。一个封装比较好的网络请求框架,会让开发者在发送请求和处理回调都十分方便。这篇文章就围绕着使用比较广泛的okhttp3来写,声明一下,本人不是大神,所以封装的并不完善,只是想给大家共享一下这个小小的成果。

我打算以3篇文章来介绍我是怎么封装okhttp3这个框架的,就是围绕着OkHttpClient, request, callback这三个主题来写。

本篇文章来配置request


上一篇文章已经介绍,okHttp3框架发送请求是通过调用OkHttpClient的newCall()方法,来传入Request对象实现的。
那么Request对象里面都有什么,接下来给大家介绍一下。
Request对象,主要配置:请求Url, 请求头, 请求参数
我封装了一个Request工具类,用来封装适用于Get请求和Post请求,看代码:

Get请求:

    public static Request createGetRequest(String url, RequestParams params, RequestParams headers){
        StringBuilder urlBuilder = new StringBuilder(url).append("?");
        if(params != null){
            for(Map.Entry entry: params.urlParams.entrySet()){
                urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            }
        }
        //添加请求头
        Headers.Builder mHeaderBuild = new Headers.Builder();
        if (headers != null) {
            for (Map.Entry entry : headers.urlParams.entrySet()) {
                mHeaderBuild.add(entry.getKey(), entry.getValue());
            }
        }
        Headers mHeader = mHeaderBuild.build();
        Request request = new Request.Builder().url(urlBuilder.substring(0, urlBuilder.length() - 1)).get().headers(mHeader).build();
        Log.e("fangming", "requestUrl: " + request.url());

        return request;
    }

说明:
Get请求大家应该都熟悉,就是将参数拼接到Url后边。
Headers.Builder是okHttp3框架中用来生成请求头的构建类,将请求头参数以键值对的方式put进去即可。
接下来创建Request对象,传入拼接好的Url和创建的Header。就可以构建了Request对象了。

Post请求:

    public static Request createPostRequest(String url, RequestParams params, RequestParams headers){
        FormBody.Builder mFormBodyBilder = new FormBody.Builder();
        if(params != null){
            for(Map.Entry entry: params.urlParams.entrySet()){
                //将请求参数遍历添加到请求构建类中
                mFormBodyBilder.add(entry.getKey(), entry.getValue());
            }
        }
        //添加请求头
        Headers.Builder mHeaderBuild = new Headers.Builder();
        if (headers != null) {
            for (Map.Entry entry : headers.urlParams.entrySet()) {
                mHeaderBuild.add(entry.getKey(), entry.getValue());
            }
        }

        //获取真正的请求体
        FormBody mFormBody = mFormBodyBilder.build();
        Headers mHeader = mHeaderBuild.build();
        Request request = new Request.Builder().url(url).post(mFormBody).headers(mHeader).build();
        Log.e("fangming", "requestUrl: " + request.url());

        return request;
    }

说明:
Post请求跟Get请求不同,参数并不是直接拼接在Url之后,而是通过FormBody对象中,使用方法与Header对象相同,都是将键值对put进去。
然后创建Request对象,传入Url,FormBody和Header。就可以构建了Request对象了。

请求头和参数对象RequestParams是我查找资源后封装的一个集合对象类 ,里面加了一些异常处理和循环处理,其实使用普通的Map就可以。


okHttp3框架中,使用的都是创建者模式来创建对象,例如:OkHttpClient.Builder,FormBody.Builder(),Headers.Builder(),Request.Builder()。创建者模式又称建造者模式,是用来创建复杂对象的良策,虽然这个设计模式的使用并不多,但是还是了解一下比较好,这里就不多介绍了。

你可能感兴趣的:(Android)