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

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

耿俊
2023-03-14
问题内容

我在将OkHttp 2.7.0与Retrofit 2-beta2结合使用。

为了OkHttpClient从Retrofit 获取对象,我正在使用Retrofit
.client()
方法并取消所有正在运行的请求,我将其称为cancel(Object
tag)
方法,但是请求仍然保持运行,并且得到响应。

即使客户Dispatcher的getQueuedCallCount()和getRunningCallCount()返回0调用cancel()之后。

为了使它正常工作,我还需要做什么吗?还是可能是OkHttp中的错误?

作为解决方法,我正在致电shutdownNow()客户,ExecutorService 但我希望使用更干净的解决方案


问题答案:

更新: 现在,使用Dispatcher具有cancelAll()方法的OkHttp
3可以轻松实现这一点。调度程序是从返回的OkHttpClient.dispatcher()

旧的解决方案: 这样做的唯一方法(我可以找到)是创建OkHttpClientRetrofit 的子类并与Retrofit一起使用。

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);


 类似资料:
  • 我使用改造2-beta2与OkHttp 2.7.0。 为了从改造中获取对象,我正在使用改造.client()方法并取消所有正在运行的请求,我正在调用它的unund(Object tag)方法,但请求仍然保持运行,我得到一个响应。 甚至客户端的< code>Dispatcher的getQueuedCallCount()和getRunningCallCount()在调用cancel()后返回0。 我还

  • 我使用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