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

Ser*_*ion 16 android retrofit2 rx-java2

我正在执行网络请求,我发送文件和消息.我想有一个取消当前请求的选项.我发现了两个类似的问题,并且都建议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();
            }
        });
Run Code Online (Sandbox Code Playgroud)

那么如何取消订阅/取消我的请求?谢谢.

Arn*_*Rao 15

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


Gev*_*yan 5

在 RXJava 中,您必须使用订阅来取消订阅

private Subscription mSubscription;

/.../

Observable<MessengerRaw> observable = mModel.sendMessage(message, companion, description, multiParts);
Subscription subscription = observable.subscribe(new Observer<MessengerRaw>() {/.../});
Run Code Online (Sandbox Code Playgroud)

当您想取消订阅时,可以致电

if(!subscription.isUnsubscribed()){
    subscription.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)

在RXJava 2中observable.subscribe(new Observer<MessengerRaw>() {/.../});返回Disposable对象,可以调用dispose();

  • 你是对的: @Override public void onSubscribe(Disposable d) { } 有一次性的,我可以在其上调用 dispose() 并取消请求。谢谢。您可以将其包含在您的答案中,以便其他人可以立即看到。 (2认同)