改造2 + RxJava取消/取消订阅

时间:2017-06-15 18:25:25

标签: android retrofit2 rx-java2

我正在执行网络请求,我发送文件和消息。 我想有一个取消当前请求的选项。我发现了两个类似的问题,两者都表明observable.subscribe(Observer)返回了具有方法unsubscribe()的Subscription对象。

Here is the first one

And the second one

就我而言,我使用的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 个答案:

答案 0 :(得分:12)

在RxJava2中,您可以在oserver的onSubscribe回调方法中获取Disposable对象,您可以使用它来处理订阅。

答案 1 :(得分:3)

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