今天给我们上次封装的工具增添新功能
在请求的过程中
会遇见一些情况需要取消请求
比如请求的页面已经关闭
或者下载时用户点击了“取消”按钮等
现在就来完善这部分的功能
首先在我们的基础接口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举例