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 ();