6

我最近升级到OkHttp3,并注意到您不能再直接从客户端取消调用标签。这必须由应用程序现在处理。

在此处的变更日志中说明:

取消批量调用现在是应用程序的责任。 通过标签取消调用的 API 已被移除,并被更通用的机制所取代。调度程序现在通过它的 runningCalls() 和 queuedCalls() 方法公开所有正在进行的调用。您可以编写代码,按标签、主机或其他选择调用,并在不再需要的调用上调用 Call.cancel()。

我正在使用我的简单实用程序方法自行回答这篇文章,以取消正在运行或排队的按标签呼叫。

4

1 回答 1

11

使用以下实用程序类取消正在运行或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

于 2016-03-12T23:39:43.537 回答