Дооснащение 2 + RxJava отмена/отмена подписки

Я выполняю сетевой запрос, где я отправляю файлы и сообщение. Я хотел бы иметь возможность отменить текущий запрос. Я нашел два похожих вопроса, и оба предполагают, что observable.subscribe(Observer) возвращает объект Subscription, у которого есть метод 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();
            }
        });

Итак, как мне отменить/отменить мой запрос? Спасибо.

Ответ 1

В RxJava2 вы можете получить одноразовый объект в методе обратного вызова onSubscribe для oserver, который вы можете использовать для размещения подписки.

Ответ 2

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