在取消所有请求后,Android会在“onFailure()”中改进“已取消”标志的意外值

时间:2016-11-10 18:35:24

标签: java android retrofit2 okhttp3 okhttp

我使用的是最新版本的Retrofit。我在活动和onDestroy方法中执行多个请求,即当活动结束时,我希望终止所有待处理的请求,因此我呼叫okHttpClient.dispatcher().cancelAll()

请求的onFailure方法以这种方式处理: -

        @Override
        public void onFailure(Call<APIResponseClass> call, Throwable t) {

            if (call != null && !call.isCanceled()) {
                // Call is not cancelled, Handle network failure

                onNetworkFailure(call, t);

            } else if (call != null && call.isCanceled()){

                // Call is CANCELLED. IGNORE THIS SINCE IT WAS CANCELLED.

            }
        }


问题是,我在onFailure方法中收到了意外行为。尽管通过okHttpClient.dispatcher().cancelAll()取消了通话,但已取消标志已收到false,该标志本应为true,即call.isCancelled()应为true

但是,变量Throwable t令人惊讶的是将原因发送为 java.io.IOException:已取消,并将detailMessage作为已取消。我添加了调试器的屏幕截图...

enter image description here

我的问题是,如果异常的原因被确定为取消请求,为什么取消的标志不显示正确的结果??

我已取消referring to this link取消正在进行的改装请求......

请帮助。

1 个答案:

答案 0 :(得分:0)

尽管我讨厌回答我的问题,但由于没有人在这里回答,我写这篇文章是为了帮助其他人面对类似的问题。

是的,这是Retrofit Library中的一个错误。由于没有人在StackOverflow中响应,我在官方的Retrofit Github存储库中提出了相同的查询。 您可以在此处找到问题的链接。 https://github.com/square/retrofit/issues/2076

预计将在Retrofit版本v2.2中修复。