2015-12-22 2 views
0

Я использую Retrofit 2.0. Для того, чтобы получить некоторые данные из услуг RESTFull я использую процедуры, как это:Отменить запрос на отмену

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 
    } 
} 
Смежные вопросы