2015-12-22 122 views
0

我使用Retrofit 2.0。爲了充分利用REST類型的服務的一些數據我用的程序是這樣的:改裝取消請求

public Call downloadUser() { 
     // Create RetrofitService 
     Call<User> call = service.getUser(); 
     call.enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Response<User> response, Retrofit retrofit) { 
       // Do some operations with User obj if response.isSuccess() 
      } 

      @Override 
      public void onFailure(Throwable t) { 
       // Failure 
      } 
     }); 
     return call; 
    } 

在某些情況下,我要取消我的請求。我使用call.cancel(),但即使我將此過程稱爲Callback.onResponse(...)Callback.onFailure(...),因此使用Call.cancel()不會取消我的請求,並且它會一直持續到故障或響應。

回答

1

要知道一個通​​話是否被取消或者它是否真的成功,你需要兩件事。

首先它看起來像Retrofit2的版本使用的是需要更新

您可以檢查是否在通話是基於下面的代碼取消。請注意,這將處理取消Call<>Dispatcher.class在OKHttp3

@Override 
public void onResponse(Response<User> response, Response response) { 
    if(response != null && response.isSuccessful()) { 
     //Do Stuff with the response 
    } 
} 

@Override 
public void onFailure(Call<User> user, Throwable t) { 
    if(user.isCanceled() || "Canceled".equals(t.getMessage())) { 
     //Call was canceled 
    } else { 
     //Call failed 
    } 
}