【问题标题】:Retrofit 2 + RxJava cancel/unsubscribeRetrofit 2 + RxJava 取消/取消订阅
【发布时间】:2017-06-15 18:25:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: android retrofit2 rx-java2


    【解决方案1】:

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

    【讨论】:

    • 我会将此答案标记为已接受,因为它直接指向解决方案。先前接受的答案未正确编辑。干杯。
    【解决方案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 2observable.subscribe(new Observer&lt;MessengerRaw&gt;() {/.../});返回Disposable对象,可以调用dispose();

    【讨论】:

    • observable.subscribe(new Observer() {/.../});没有返回订阅的重载版本。有返回 Disposable、Observable 和 void 的版本。
    • 你可以调用dispose();
    • 你是对的:@Override public void onSubscribe(Disposable d) { } 有一次性的,我可以调用 dispose() 并请求取消。谢谢。您可以将其添加到您的答案中,以便其他人可以立即看到。
    • 很高兴有帮助。
    • 在 RxJava 2 中,没有 Subscription.unsubscribe() 方法,属于 RxJava 1。
    猜你喜欢
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多