web-dev-qa-db-ja.com

Retrofit 2 + RxJavaのキャンセル/サブスクライブ解除

ファイルとメッセージを送信するネットワーク要求を実行しています。現在のリクエストをキャンセルするオプションがあります。私は2つの同様の質問を見つけましたが、どちらもobservable.subscribe(Observer)がメソッドunsubscribe()を持つSubscriptionオブジェクトを返すことを示唆しています。

これが最初のものです

そして2番目のもの

私の場合、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();
            }
        });

それでは、どうすればリクエストを購読解除/キャンセルできますか?ありがとうございました。

16
Sermilion

RxJava2では、oserverのonSubscribeコールバックメソッドでDisposableオブジェクトを取得できます。これを使用して、サブスクリプションを破棄できます。

15
Arnav Rao

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>() {/.../});がDisposableオブジェクトを返す場合、dispose()を呼び出すことができます。

3
Gevork Safaryan