我最近升级到OkHttp3,发现您无法再直接从客户端取消标记。这必须由应用程序现在处理。
在CHANGELOG处注明:
取消批量电话现在是应用程序的责任。 取消按标记调用的API已被删除并替换为 更一般的机制。调度员现在公开所有正在进行的呼叫 通过其runningCalls()和queuedCalls()方法。你可以编写代码 通过标签,主机或其他任何方式选择调用,然后调用 Call.cancel()关于那些不再需要的。
我用我的简单实用工具方法自行回答这篇文章,以取消正在运行或排队的Call by tag。
答案 0 :(得分:8)
使用以下实用程序类取消正在运行或排队的Call
标记:
public class OkHttpUtils {
public static void cancelCallWithTag(OkHttpClient client, String tag) {
// A call may transition from queue -> running. Remove queued Calls first.
for(Call call : client.dispatcher().queuedCalls()) {
if(call.request().tag().equals(tag))
call.cancel();
}
for(Call call : client.dispatcher().runningCalls()) {
if(call.request().tag().equals(tag))
call.cancel();
}
}
}
我创建了一个示例,其中包含一个测试用例:https://gist.github.com/RyanRamchandar/64c5863838940ec67f03