Как отменить запрос с retofit2 и RxAndroid

Я использую Retrofit 2.0 и Rx-android для загрузки своих API. Я следую разделу RxJava Integration with CallAdapter на этом сайте, и все работает нормально. Но я не знаю, как отменить запрос на загрузку наблюдаемого объекта. Пожалуйста, помогите дать мне идею.


person Nguyen Minh Binh    schedule 10.12.2015    source источник


Ответы (1)


Единственный способ отменить выполнение RxJava Observable — отписаться от него. RxJavaCallAdapter делегирует отмену клиенту okhttp.

Итак, вы просто делаете что-то вроде этого:

Subscription subscription = getObservable().subscribe();

//When you want to stop execution
subscription.unsubsribe();

Вы можете проверить код здесь. Конкретно эти строки, если код

final Call<T> call = originalCall.clone();

// Attempt to cancel the call if it is still in-flight on unsubscription.
subscriber.add(Subscriptions.create(new Action0() {
  @Override public void call() {
    call.cancel();
  }
}));
person Vasilov Artur    schedule 10.12.2015
comment
Я просто тестирую 'unsubscribe()' и вижу, что это работает. Абонент больше не будет звонить. Но почему okhttp continue печатает журнал много раз. Как я могу проверить, что okhttp будет отменен? - person Nguyen Minh Binh; 10.12.2015
comment
Я тоже это проверил, он работает, просто печатает GET и END GET. Но, конечно, ни один запрос не мог быть остановлен. Может быть, у вас есть в этом случае. Но это по-прежнему единственный способ отменить запрос, и он абсолютно аналогичен отмене Retrofit Call. Вы можете проверить это, поставив точку останова на call.cancel(); например - person Vasilov Artur; 10.12.2015
comment
Спасибо, Василов. Поскольку это единственный способ, я буду использовать его, пока не найду лучшее решение. - person Nguyen Minh Binh; 10.12.2015
comment
@VasilovArtur Ссылка на исходный код не работает. Это последняя ссылка github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/ И он не содержит предоставленного вами фрагмента кода. - person toobsco42; 15.02.2017
comment
@toobsco42 на самом деле это ничего не меняет. Звонок по-прежнему отменяется при отмене подписки, теперь он здесь github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/ - person Vasilov Artur; 15.02.2017
comment
Как вы можете проверить, был ли вызов отменен внутри методов обратного вызова Observer? - person toobsco42; 15.02.2017