Retrofit 2 + RxJava отмена / отмена подписки
Я выполняю сетевой запрос, куда я отправляю файлы и сообщение.
Я хотел бы иметь возможность отменить текущий запрос. Я нашел два похожих вопроса, и оба предполагают, что observable.subscribe(Observer)
возвращает объект подписки, который имеет метод unsubscribe()
.
в моем случае, я использую observable.subscribe(Observer)
, который является ничтожным. Вот мой код:
Observable<MessengerRaw> observable = mModel.sendMessage(message, companion, description, multiParts);
observable.subscribe(new Observer<MessengerRaw>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(MessengerRaw value) {
if (getView() != null) {
((MessengerActivity) getView()).resetMessegeView();
((MessengerActivity) getView()).updateMessageList();
}
}
@Override
public void onError(Throwable e) {
getData().remove(0);
if (getView() != null) {
((MessengerActivity) getView()).updateMessageList();
}
}
@Override
public void onComplete() {
hideProgress();
}
});
Итак, как мне отписаться/отменить мой запрос? Спасибо.
2 ответов
в RxJava2 вы можете получить одноразовый объект в методе обратного вызова onSubscribe oserver, который вы можете использовать для удаления подписки.
в RXJava вы должны использовать подписки для отмены подписки
private Subscription mSubscription;
/.../
Observable<MessengerRaw> observable = mModel.sendMessage(message, companion, description, multiParts);
Subscription subscription = observable.subscribe(new Observer<MessengerRaw>() {/.../});
Если вы хотите отписаться, вы можете позвонить
if(!subscription.isUnsubscribed()){
subscription.unsubscribe();
}
В RXJava 2 observable.subscribe(new Observer<MessengerRaw>() {/.../});
возвращает одноразовый объект, вы можете вызвать dispose ();