(原创)接口隔离原则封装一个自己的网络请求库(二)增加取消请求功能

今天给我们上次封装的工具增添新功能

在请求的过程中

会遇见一些情况需要取消请求

比如请求的页面已经关闭

或者下载时用户点击了“取消”按钮等

现在就来完善这部分的功能

首先在我们的基础接口INetManager里新增cancel方法

整体代码如下:

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

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


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



}

然后是实现类的修改

这里依旧用上一篇的OkhttpNetManager举例

OkhttpNetManager需要实现父类的方法

根据用户传入的tag去查询需要取消的请求

然后取消该请求

代码如下:

    @Override
    public void cancel(Object tag) {

        //正在排队的call
        List<Call> queuedCalls = sokHttpClient.dispatcher().queuedCalls();
        if (queuedCalls != null) {
            for (Call call : queuedCalls) {
                if (tag.equals(call.request().tag())) {
                    call.cancel();
                    Log.d("print", "取消的请求的tag: " + tag);
                }
            }
        }

        //正在运行的call
        List<Call> runningCalls = sokHttpClient.dispatcher().runningCalls();
        if (runningCalls != null) {
            for (Call call : runningCalls) {
                if (tag.equals(call.request().tag())) {
                    call.cancel();
                    Log.d("print", "取消的请求的tag: " + tag);
                }
            }
        }


    }

重写完父类的方法后

在我们需要取消请求的时候

只需要调用以下代码即可取消重写了

比如在MainActivity里就可以这样写:

INetClient.getsInstance()
                .getmNetManager()
                .cancel(MainActivity.this);

当然,我们在进行网络请求的时候

也需要判断请求是否被取消了

这里在第一篇的get请求中已经做过

被取消的请求返回即可

 if (call.isCanceled())
 {
        return;
                     }

这样,简单的取消功能就做好了。

之后会继续新增其他基础功能

依旧以OkhttpNetManager举例

猜你喜欢

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