【发布时间】:2016-03-25 21:19:09
【问题描述】:
我正在使用带有 OkHttp 2.7.0 的 Retrofit 2-beta2。
为了从 Retrofit 获取 OkHttpClient 对象,我使用 Retrofit .client() 方法并取消它所有正在运行的请求,我称之为 cancel(Object tag) 方法,但请求仍在运行,我得到了响应。
即使是客户端的Dispatcher 的getQueuedCallCount() 和getRunningCallCount() 在调用cancel() 后也返回0。
我还需要做些什么才能使其正常工作吗?或者它可能是 OkHttp 中的一个错误?
作为一种解决方法,我在客户的ExecutorService 上调用shutdownNow(),但我更喜欢更简洁的解决方案。
【问题讨论】:
-
在浏览了源代码之后,我现在明白为什么这不起作用了。我正在使用拦截器在
Request上设置标签,因此创建了一个新的Request对象。OkHttpClient.cancel(Object tag)什么都不做,因为原始的Request(在其上调用cancel(),因为它存在于Dispatcher的请求队列中)仍然没有标签集。似乎 Retrofit 没有公开任何方法或接口来在原始Request对象上设置标签。
标签: java android retrofit okhttp