OkHttpClient无法取消标记

时间:2016-03-12 23:38:13

标签: java okhttp okhttp3

我最近升级到OkHttp3,发现您无法再直接从客户端取消标记。这必须由应用程序现在处理。

CHANGELOG处注明:

  

取消批量电话现在是应用程序的责任。   取消按标记调用的API已被删除并替换为   更一般的机制。调度员现在公开所有正在进行的呼叫   通过其runningCalls()和queuedCalls()方法。你可以编写代码   通过标签,主机或其他任何方式选择调用,然后调用   Call.cancel()关于那些不再需要的。

我用我的简单实用工具方法自行回答这篇文章,以取消正在运行或排队的Call by tag。

1 个答案:

答案 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