2016-11-10 73 views
1

我正在使用最新版本的Retrofit。我在一项活动和onDestroy方法中执行多个请求,即当活动结束时,我希望终止所有待处理的请求,因此我要求okHttpClient.dispatcher().cancelAll()取消所有请求后,Android改进了'onFailure()'中'取消'标志的意外值

请求的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取消正在进行的改造请求...

请帮助。

+0

这可能是改造库中的一个错误吗?或者我错过了什么?从这里给出的链接https://futurestud.io/tutorials/retrofit-2-cancel-requests,他们也使用'call.isCanceled()'方法来达到这个目的。如果它是一个bug,我可以在他们的github仓库中提出问题吗?我需要你的建议.... – oathkeeper

回答

0

尽管我讨厌回答我的问题,但由于没有人在这里回答,所以我正在写这个以帮助其他人面临类似的问题。

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

这个问题有望在Retrofit版本v2.2中修复。