当前位置: 首页 > 知识库问答 >
问题:

改装2/OkHttp:取消所有正在运行的请求

百里飞捷
2023-03-14

我使用改造2-beta2与OkHttp 2.7.0。

为了从改造中获取OkHttpClient对象,我正在使用改造.client()方法并取消所有正在运行的请求,我正在调用它的unund(Object tag)方法,但请求仍然保持运行,我得到一个响应。

甚至客户端的< code>Dispatcher的getQueuedCallCount()和getRunningCallCount()在调用cancel()后返回0。

我还需要做些什么来让它工作吗?或者可能是OkHttp中的bug?

作为一种解决方法,我在客户端的ExecutorService上调用Shutdown Now(),但我更喜欢更简洁的解决方案。

共有1个答案

闾丘坚诚
2023-03-14

更新:现在在OkHttp 3中使用Dispatcher更容易实现,它有一个取消所有()方法。调度程序从OkHttpClient.dispatcher()返回。

旧的解决方案:做到这一点的唯一方法(我能找到的)是创建OkHttpClient的子类,并将其与改造一起使用。

class OkHttpClientExt extends OkHttpClient {
    static final Object TAG_CALL = new Object();

    @Override
    public Call newCall(Request request) {
        Request.Builder requestBuilder = request.newBuilder();
        requestBuilder.tag(TAG_CALL);
        return super.newCall(requestBuilder.build());
    }
}

以下行取消所有带有标记TAG_CALL的请求。由于上面的类对所有请求设置了TAG_CALL,因此所有请求都被取消。

retrofit.client().cancel(OkHttpClientExt.TAG_CALL);
 类似资料:
  • 问题内容: 我在将OkHttp 2.7.0与Retrofit 2-beta2结合使用。 为了从Retrofit 获取对象,我正在使用Retrofit .client() 方法并取消所有正在运行的请求,我将其称为cancel(Object tag) 方法,但是请求仍然保持运行,并且得到响应。 即使客户的getQueuedCallCount()和getRunningCallCount()返回0调用ca

  • 我使用youtube API制作了一个应用程序。首先,我使用< code > retrieve 加载视频列表,然后我继续使用< code > retrieve 加载列表中视频的所有信息。 由于<code>列表视图<code>支持刷新和加载更多,我需要<code>取消<code>所有调用请求。 我知道调用了<code>cancel()cancel()。 还有更好的解决方案吗?

  • 问题内容: 我需要能够 使用 OKHTTP* 来 管理 一些请求,使用来通过输入地址来接收一些预测。该 问题是 ,我插入每次 CHAR 它将使一个新的请求,但在同一时间,我需要取消前一个!例如:纽约市=同时请求13个!因此,我仅使用一个实例来尝试取消已请求但没有成功的任何内容。这就是我所做的! * 我检查对象是否为null并取消请求,但仍然不断! 问题答案: 关于以下内容:

  • 目前,我正在使用mrecestQueue.cancelAll(getActive())在一个片段中的on Stop方法,但显然,当我将手机从横向移动到纵向时,它仍然返回请求中的数据,但会导致崩溃,因为持有人数据泄露已经存在了。有什么如何正确处理的示例代码吗?

  • 问题内容: 我知道statement.cancel()可用于取消正在运行的SQL查询,但是我想知道的是,我将如何在另一个线程中保持该语句对象。 用例: 我请求启动一个运行语句的线程。 然后从一个单独的请求(另一个线程),我可能想取消此线程。 我将如何在这个 新请求中 获得声明以在其中调用cancel方法。 在某些情况下,我可能要运行多个语句。 附加信息,它是一个Web应用程序,使用spring框架

  • 问题内容: 我正在制作网络爬虫。我将网址传递给搜寻器函数,并对其进行解析以获取锚标记中的所有链接,然后为所有这些网址使用相同的搜寻器函数,并对每个网址使用单独的goroutine。 但是,如果在我收到响应之前发送请求并取消它,则该特定请求的所有程序仍在运行。 现在我想要的是,当我取消请求时,由于该请求而被调用的所有goroutine都会停止。 请指导。 以下是我的 搜寻器 功能代码。 以下是我的P