Я использую Retrofit 2.0 и Rx-android для загрузки своих API. Я следую разделу RxJava Integration with CallAdapter
на этом сайте, и все работает нормально. Но я не знаю, как отменить запрос на загрузку наблюдаемого объекта. Пожалуйста, помогите дать мне идею.
Как отменить запрос с retofit2 и RxAndroid
Ответы (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
Я просто тестирую 'unsubscribe()' и вижу, что это работает. Абонент больше не будет звонить. Но почему okhttp continue печатает журнал много раз. Как я могу проверить, что okhttp будет отменен?
- person Nguyen Minh Binh; 10.12.2015
Я тоже это проверил, он работает, просто печатает GET и END GET. Но, конечно, ни один запрос не мог быть остановлен. Может быть, у вас есть в этом случае. Но это по-прежнему единственный способ отменить запрос, и он абсолютно аналогичен отмене Retrofit Call. Вы можете проверить это, поставив точку останова на call.cancel(); например
- person Vasilov Artur; 10.12.2015
Спасибо, Василов. Поскольку это единственный способ, я буду использовать его, пока не найду лучшее решение.
- person Nguyen Minh Binh; 10.12.2015
@VasilovArtur Ссылка на исходный код не работает. Это последняя ссылка github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/ И он не содержит предоставленного вами фрагмента кода.
- person toobsco42; 15.02.2017
@toobsco42 на самом деле это ничего не меняет. Звонок по-прежнему отменяется при отмене подписки, теперь он здесь github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/
- person Vasilov Artur; 15.02.2017
Как вы можете проверить, был ли вызов отменен внутри методов обратного вызова Observer?
- person toobsco42; 15.02.2017