关于网络请求组件的疑问

来源:8-8 功能测试

qq_坎坷人生_0

2019-12-05

图片描述使用网络请求组件的时候,由于voice包下面没有导入okhttp3的包所以编译器报错,然而我并不打算在voice包中导入okhttp3。然后我将网络请求组件修改了一下。新创了两个类MyCall和MyRequest 分别储存这些静态方法的返回值,然后将CommonOkHttpClient.get方法的返回类型改成MyCall,CommonRequest.createGetRequest改成MyRequest,然后就可以正常运行了(改动如下)。组件也可以正常使用。
但是我觉得CommonOkHttpClient.get方法的返回值类型直接改成void是不是更方便,反正也没有用到这个Call。还有我这样修改会不会有什么潜在的问题。

新增的两个类:
MyCall

import okhttp3.Call;

public class MyCall  {
    private Call call;

    public Call getCall() {
        return call;
    }

    public void setCall(Call call) {
        this.call = call;
    }
}

MyRequest

import okhttp3.Request;

public class MyRequest {

    private Request request;

    public Request getRequest() {
        return request;
    }

    public void setRequest(Request request) {
        this.request = request;
    }
}

修改的方法

 /**
     * get请求
     * @return
     */
    public static MyCall get(MyRequest request, DisposeDataHandle handle){
        Call call = mOkHttpClient.newCall(request.getRequest());
        call.enqueue(new CommonJsonCallback(handle));
        MyCall myCall = new MyCall();
        myCall.setCall(call);
        return myCall;
    }
    /**
     * 构建get的请求对象
     * @param url
     * @param params
     * @return
     */
    public static MyRequest createGetRequest(String url,RequestParams params){
        return createGetRequest(url,params,null);
    }

    /**
     * 构建get的请求对象
     * @param url
     * @param params
     * @param heads
     * @return
     */
    public static MyRequest createGetRequest(String url,RequestParams params,RequestParams heads){
        StringBuilder urlBuilder = new StringBuilder(url).append("?");
        if (params !=null){
            for (Map.Entry<String,String>entry : params.urlParams.entrySet()){
                //参数遍历
                urlBuilder.append(entry.getKey())
                        .append("=")
                        .append(entry.getValue());
            }
        }

        Log.e("CommonRequest get ",urlBuilder.toString());
        Headers.Builder builderHeaders = new Headers.Builder();
        if (heads != null){
            for (Map.Entry<String,String>entry : heads.urlParams.entrySet()){
                //请求头遍历
                builderHeaders.add(entry.getKey(),entry.getValue());
            }
        }
        Request request = new Request.Builder()
                .url(url)
                .headers(builderHeaders.build())
                .get().build();
        MyRequest myRequest = new MyRequest();
        myRequest.setRequest(request);
        return myRequest;
    }
写回答

1回答

qndroid

2019-12-05

返回call可以取消请求

0
0

企业级Android架构设计+功能开发

掌握企业级架构设计、功能开发,提升个人能力层次

1236 学习 · 274 问题

查看课程