趁周末时间撸了两天代码,将OkHttp网络请求框架进行了一次简单封装,对于实际开发非常有用。。

 

此次封装主要针对我们经常使用的网络请求的步骤进行封装,在已有框架OkHttp的基础上进行实际开发的封装

发送一个网络请求,有以下三个功能模块:

一:request处理

二:OkHttp核心处理

三:callback处理

我们进行网络请求组件的封装也是根据这三大模块进行封装的,下面规划一下这次封装的一个思维导图:

Android实际开发之网络请求组件的封装(OkHttp为核心)

 

根据以上思维导图,我们第一步,先进行request的封装:

以下是封装的一个CommonRequest类:

 1 package com.oysd.okhttp.request;
 2 
 3 import java.util.Map;
 4 
 5 import okhttp3.FormBody;
 6 import okhttp3.Request;
 7 
 8 /**
 9  * *****************************************************************
10  * * 文件作者:ouyangshengduo
11  * * 创建时间:2017/3/25
12  * * 文件描述:接收请求参数,为我们生成request对象
13  * * 修改历史:2017/3/25 21:02*************************************
14  **/
15 
16 public class CommonRequest {
17 
18     /**
19      *
20      * @param url
21      * @param params
22      * @return返回一个创建好的Request对象
23      */
24     public static Request createPostRequest(String url, RequestParams params){
25 
26         FormBody.Builder mFormBodyBuild = new FormBody.Builder();
27 
28         if(params != null){
29             for(Map.Entry<String,String> entry: params.urlParams.entrySet()){
30                 //将请求参数遍历添加到我们的请求构件类中
31                 mFormBodyBuild.add(entry.getKey(),entry.getValue());
32             }
33         }
34         //通过请求构件类的build方法获取到真正的请求体对象
35         FormBody mFormBody = mFormBodyBuild.build();
36         return new Request.Builder().url(url).post(mFormBody).build();
37     }
38 
39     /**
40      *
41      * @param url
42      * @param params
43      * @return 通过传入的参数,返回一个创建Get类型的Request对象
44      */
45     public static Request createGetRequest(String url,RequestParams params){
46 
47         StringBuilder urlBuilder = new StringBuilder(url).append("?");
48         if(params != null){
49             for(Map.Entry<String,String> entry: params.urlParams.entrySet()){
50                 //将请求参数遍历添加到我们的请求构件类中
51                 urlBuilder.append(entry.getKey()).append("=").
52                         append(entry.getValue()).append("&");
53             }
54         }
55 
56         return new Request.Builder().url(urlBuilder.substring(0,urlBuilder.length() - 1))
57                 .get().build();
58     }
59 
60 }

 

其中的RequestParams功能比较简单,是封装所有的请求参数到HashMap中,可展开查看代码内容:

package com.oysd.okhttp.request;

import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * *****************************************************************
 * * 文件作者:ouyangshengduo
 * * 创建时间:2017/3/25
 * * 文件描述:封装所有的请求参数到HashMap中
 * * 修改历史:2017/3/25 16:36*************************************
 **/

public class RequestParams {

    public ConcurrentHashMap<String,String> urlParams = new ConcurrentHashMap<String,String>();
    public ConcurrentHashMap<String,Object> fileParams = new ConcurrentHashMap<String,Object>();

    /**
     * Constructs a new empty {@code RequestParams} instance.
     */
    public RequestParams() {
        this((Map<String, String>) null);
    }

    /**
     * Constructs a new RequestParams instance containing the key/value string
     * params from the specified map.
     *
     * @param source the source key/value string map to add.
     */
    public RequestParams(Map<String, String> source) {
        if (source != null) {
            for (Map.Entry<String, String> entry : source.entrySet()) {
                put(entry.getKey(), entry.getValue());
            }
        }
    }

    /**
     * Constructs a new RequestParams instance and populate it with a single
     * initial key/value string param.
     *
     * @param key   the key name for the intial param.
     * @param value the value string for the initial param.
     */
    public RequestParams(final String key, final String value) {
        this(new HashMap<String, String>() {
            {
                put(key, value);
            }
        });
    }

    /**
     * Adds a key/value string pair to the request.
     *
     * @param key   the key name for the new param.
     * @param value the value string for the new param.
     */
    public void put(String key, String value) {
        if (key != null && value != null) {
            urlParams.put(key, value);
        }
    }

    public void put(String key, Object object) throws FileNotFoundException {

        if (key != null) {
            fileParams.put(key, object);
        }
    }

    public boolean hasParams() {
        if(urlParams.size() > 0 || fileParams.size() > 0){

            return true;
        }
        return false;
    }

}
View Code

相关文章:

  • 2022-12-23
  • 2021-09-16
  • 2021-11-26
  • 2021-10-31
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-01
  • 2022-12-23
  • 2021-07-10
  • 2021-05-27
  • 2022-01-07
  • 2022-12-23
相关资源
相似解决方案