当 Observable/Completed 完成或处置时,RxJava2 获取事件 [英] RxJava2 get event when Observable/Completed is completed or disposed

查看:28
本文介绍了当 Observable/Completed 完成或处置时,RxJava2 获取事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在订阅 Completable 时显示进度对话框,并在操作完成(成功或出错)或取消后隐藏它.

I need to show a progress dialog when I subscribe to a Completable and hide it after the operation is completed(successfully or with an error) or is canceled.

我也是这样

final Completable completable = notificationRepository.markAllAsRead()
        .doOnSubscribe(d -> progressDialog.show())
        .doOnError(error -> progressDialog.dismiss())
        .doOnComplete(() -> progressDialog.dismiss())
        .doOnDispose(() -> progressDialog.dismiss());

有没有什么优雅的方法来获得单个回调onErroronCompleteonDispose 发生了吗?

Is there any elegant way to get single callback when onError, onComplete or onDispose happens?

推荐答案

我已经做了一些测试,所以

I have done some tests, so

doOnDispose 在订阅者取消订阅时调用,完成后不再调用.

doOnDispose is called when the subscriber cancels the subscription, it is never called after completion.

doOnCompleteObservable/Completable 成功完成时被调用.(错误不会发生)

doOnComplete is called when the Observable/Completable completes successfully. (Error doesn't happen)

doOnErrorObservable/Completable 发出错误时被调用.(OnComplete 未被调用).

doOnError is called when Observable/Completable emits an error. (OnComplete is not called).

doOnTerminateObservable/Completable 发出 errorcompletes 时被调用.所以它是 doOnComplete + doOnError

doOnTerminate is called when Observable/Completable emits an error or completes. So it's doOnComplete + doOnError

doFinallyCompletable/Observable 发出信号 onErroronComplete 或被处置.所以它是 doOnDispose + doOnError +doOnComplete.

doFinally is called when Completable/Observable signals onError or onComplete or gets disposed. So it is doOnDispose + doOnError +doOnComplete.

所以 doFinally 就是我要找的,谢谢 akarnokd 的帮助.

So doFinally is what I was looking for, Thank you akarnokd for help.

这篇关于当 Observable/Completed 完成或处置时,RxJava2 获取事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆