(原创)接口隔离原则封装一个自己的网络请求库(三)post请求功能

今天继续完善我们的网络请求框架

这一次完善post功能

依旧在我们的基础接口INetManager里新增方法

整体代码如下:

/**
 * Created by lenovo on 2019/11/8.
 * 网络请求工具类
 */
public interface INetManager {

    /**
     * @param url  请求网址
     * @param callback 回调
     * @param tag  请求的tag
     */
    void get(String url, INetGetCallBack callback, Object tag);

    /**
     * post请求
     *
     * @param url
     * @param headersParam head
     * @param param        参数
     * @param callback         回调
     * @param tag          请求的tag
     */
    void post(String url, Map<String, String> headersParam, Map<String, String> param, INetPostCallBack callback, Object tag);


    /**
     * 取消请求
     *
     * @param tag
     */
    void cancel(Object tag);


}

OkhttpNetManager需要实现父类的方法

用map集合来传递参数和head

同时创建一个新的回调接口

INetPostCallBack

具体内容如下:

    @Override
    public void post(String url, Map<String, String> headersParams, Map<String, String> params, final INetPostCallBack callback, Object tag) {
        Request.Builder builder1 = new Request.Builder().url(url);
        if (headersParams != null) {//遍历head参数
            for (Map.Entry<String, String> entry : headersParams.entrySet()) {
                builder1 = builder1.addHeader(entry.getKey(), entry.getValue());
            }
        }
        FormBody.Builder builder = new FormBody.Builder();
        if (params != null) {//遍历参数
            for (Map.Entry<String, String> entry : params.entrySet()) {
                builder = builder.add(entry.getKey(), entry.getValue());
            }
        }

        FormBody body = builder.build();
        Request request = builder1.post(body).tag(tag).build();
        Call call = sokHttpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(final Call call, final IOException e) {
                if (call.isCanceled()) {
                    return;
                }
                //非ui线程
                shandler.post(new Runnable() {
                    @Override
                    public void run() {
                        //ui线程
                        callback.failed(e);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                try {
                    if (call.isCanceled()) {
                        return;
                    }
                    final String string = response.body().string();
                    //非ui线程
                    shandler.post(new Runnable() {
                        @Override
                        public void run() {
                            //ui线程
                            callback.success(string);
                        }
                    });
                } catch (Throwable e) {
                    e.printStackTrace();
                    callback.failed(e);
                }
            }
        });

    }

INetPostCallBack接口内容也比较简单

包含两个回调方法即可

/**
 * Created by lenovo on 2019/11/8.
 * 回调post接口的返回结果
 */

public interface INetPostCallBack {
    //成功的回调
    void success(String response);
    //失败的回调
    void failed(Throwable throwable);
}

最后是具体的使用

和get请求的使用基本一致

不过要先创建两个map集合

然后调用以下方法

传入相应的参数即可

 INetClient.getsInstance()
                .getmNetManager()//得到具体网络请求实现类,这里是OkhttpNetManager
                .post(具体对应参数);

到这里

基本的get和post请求以及取消操作就完成了

以后有相关的新需求,还可以继续迭代

猜你喜欢

转载自blog.csdn.net/Android_xiong_st/article/details/103023983
今日推荐