当前位置: 首页 > 面试题库 >

OkHttpClient无法取消按标签呼叫

洪凯定
2023-03-14
问题内容

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

在CHANGELOG中表示:

现在,取消批量呼叫是应用程序的责任。
删除了通过标签取消调用的API,并已将其替换为更通用的机制。调度程序现在通过其runningCalls()和queueedCalls()方法公开所有正在进行的调用。您可以编写代码,以按标签,主机或其他方式选择调用,然后在不再需要的代码上调用Call.cancel()。

我正在用我的简单实用程序方法来自动回答该帖子,以取消正在运行或排队的“按标签呼叫”。


问题答案:

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



 类似资料:
  • 我使用com.squareup.reformation:reformation:2.0.0-beta2,遇到了一些问题。我想添加通过按钮关闭部分下载的可能性。因此,我在OkHTTPClient中找到了cancel(对象标记)方法。我试图找到可以放置此标记值的位置,但没有找到任何东西。同样,将null作为参数传递也根本不起作用。有人能告诉我在哪里可以贴标签或建议其他方法吗?

  • 我正在尝试为改造设置缓存,以便它不必不断检索数据。我遵循了这个SO,因为它似乎在我需要的正确方向上。 我有以下内容(与销售订单相同) 但是,返回错误。 我在这里做错了什么?我有改造2.1.0和okhttp3 3.4.1

  • 问题内容: 詹金斯版本:1.593 Git参数插件:0.4.0 GIT客户端插件:1.16.1 我使用一个私有的git仓库,可以通过ssh访问。 我的构建已参数化。git参数是,要建立的分支是 在工作空间的初始构建之后,当我使用参数开始构建时,出现 noWorkspaceError 。 在詹金斯日志中,我有 我使用带有私钥凭据的ssh用户名,私钥直接输入。我可以确定该密钥是正确的,因为可以在没有参

  • 我使用ACR 1255U-J1作为通过蓝牙连接的外部阅读器。我用来访问阅读器的库是acsbt-1.0.0preview 7。我使用以下命令对MIFARE经典标签的扇区1(块4)进行身份验证: 当我对空的 MIFARE 经典标签进行身份验证(使用制造商默认配置)时,我收到响应状态字 。这表示身份验证成功。 但是,当我尝试对已格式化为NDEF标记的MIFARE Classic标记进行身份验证时,返回的

  • 我有史上最奇怪的虫子。 我有这个益智游戏,移动益智块(这是真正的按钮与图像附加在他们)。一切都很好,直到我试图更改某个标签的文本(以指示播放器做了多少步)。 每次调用时,移动的拼图块都会被放回它们的第一个位置。我不知道为什么,但他们就是这么做的。 它由两个面板组成,每个面板使用一个GridBagLayout。主框架也使用gridBagLayout,它由两个面板组成。 我知道这很奇怪,但我不知道是什

  • 我是不是错过了一些图书馆?