RxJava doOnError 与 onError

2024-01-12

我尝试使用以下代码

initLocalSettingsIfNeed()
                            .andThen(initGlobalSettingsIfNeed(configuration))
                            .doOnComplete(callback::onSuccess)
                            .doOnError(throwable -> callback.onError(throwable.getLocalizedMessage()))
                            .subscribe();

但我有例外

由于缺少 onError 处理程序,该异常未被处理 subscribe() 方法调用。

我想我没有正确使用这个方法,我想可以替换doOnComplete doOnError里面有观察者subscribe()方法,我错了吗?


关于你原来的问题,你必须知道doOnError不是替代品onError:

事实上,它们之间有一个关键的区别。 doOnError() 基本上只触发它的回调,然后将遇到的错误传递给下游。因此,如果在 subscribe() 中没有 onError 回调的情况下订阅整个流,您的应用程序将因 OnErrorNotImplementedException 崩溃。

另一方面, subscribe() 中的 onError 回调确实消耗了 错误。这意味着,它会捕获错误,并让您处理它们 而不自行重新抛出错误。

关于您在一条评论中提到的警告:

这种方法有效,但我警告“订阅的结果” 未使用',因为我知道这需要在以下情况下自动处理: onError 或 onComplete 被调用,有没有办法避免这个警告? ——帕维尔·波利

一个好的方法是你的方法在你的Repository返回一个Observable,然后您可以在您的ViewModel。那么,在每一个ViewModel类你可以有一个成员变量CompositeDisposable您可以在其中将每个订阅的一次性添加到存储库返回的 Observables 中。最后,您应该覆盖onCleared处理储存在仓库中的所有一次性用品的方法CompositeDisposable.

public class MyViewModel extends ViewModel {

    private MyRepository myRepository;
    private final CompositeDisposable disposables;

    @Inject
    public MyViewModel(MyRepository myRepository) {
        ...
        this.myRepository = myRepository;
        disposables = new CompositeDisposable();
        ...
    }

    public void callObservableInRepository() {
         disposables.add(myRepository.myObservable()
                              .subscribe(onSuccess -> {...} , onError -> {...}));
    }

    @Override
    protected void onCleared() {
        disposables.clear();
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxJava doOnError 与 onError 的相关文章

  • C# 与 JAVA 接口实例

    我不知道该如何回答我的问题 它是关于Android可以实例化接口的 我正在尝试用 C 来做 现在我非常确定 Java 和 C 的规则是不能创建抽象和接口的实例 但我很想知道Android是如何做到这一点的 在 Android 中你可以这样做
  • Android 错误 - close() 从未在数据库上显式调用

    我应该在代码的哪里调用 close LogCat 返回此错误 close 从未在数据库上显式调用 android database sqlite DatabaseObjectNotClosedException 应用程序未关闭此处打开的游标
  • Moshi 无法解析 nullable

    你好 希望你能帮助我 使用 kotlin Retrofit2 moshi 我从 https api spacexdata com v3 launches 获取数据并解析它 一切都很顺利 我得到的属性如下 flight number miss
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • onScale 和 Canvas - 缩放图像后如何调整原点?

    我有一个非常简单的测试应用程序 带有自定义组件MyView java https github com afarber android newbie blob master TestScroll src de afarber testscr
  • 如何从android中的webview获取选定的文本?

    我需要从网络视图中获取选定的文本 为此 我这样说 webView loadUrl javascript Android getHtml window getSelection toString 在我的触摸事件中 触摸事件效果很好 Andro
  • 如何将音频 Mediastore 持续时间转换为分钟和秒?

    我正在使用音频播放器教程androidhive info https www androidhive info 2012 03 android building audio player tutorial 在 SongsManager ja
  • 我想使用对话框显示两个数字选择器

    我试图仅使用 java 在对话框上显示两个数字选择器 代码正在工作 但我无法将其排列为相等的宽度 这是我的代码 RelativeLayout relative new RelativeLayout mContext final Number
  • Android:等待 firebase valueEventListener

    我正在尝试使用信号量来等待我的 firebase valueEventListener 我有一个用户信息活动 其中包含用户必须填写的 6 个不同字段 当用户保存他 她的信息时 我想进行 全有或全无 类型的检查 某些用户信息不能重复 例如用户
  • MediaStyle 通知未响应 RemoteControl 事件。

    我们正在将正在进行的播放通知迁移到 Lollipop 中引入的 MediaStyle 通知 RemoteControlClient 似乎已被弃用 并且 MediaStyle 通知不处理媒体按钮事件 例如通过耳机远程暂停 播放 有人得到这个工
  • 将可渲染节点(相同的旋转、位置和比例)替换为 Sceneform sdk 中的另一个可渲染节点

    我是 Android 版 sceneform sdk 的新手 我已经添加了一个Transformable Node 然后我应用了一些旋转 缩放并改变了它的位置 现在 单击按钮后 我需要放置具有相同旋转 缩放和位置的第二个节点 为此我所做的是
  • Android 生命周期哪个事件在生命周期中只触发一次?

    我读过一些博客并访问了一些网站 我想知道哪个事件在生命周期中只触发了一次 阅读博客后我意识到onCreate 方法在生命周期内仅触发一次 我不知道我是对还是错 现在我的问题是 我想触发任何仅在我更改横向或纵向方向时触发一次的事件 而不是在启
  • Firebase API 初始化失败,java.lang.reflect.InitationTargetException

    我在我的应用程序中使用 firebase 身份验证 数据库和存储服务 之前运行良好 我已经添加了 firebase 云消息传递设置 如文档中所述 但应用程序在运行时崩溃了 我调查了这个问题大约 4 个小时并尝试了不同的解决方案 就像保持所有
  • 如何从MediaCodec获取解码格式?

    我正在与MediaCodec 我用它来解码 mp4 video MediaCodec 将视频解码为YUV格式 但我需要得到RGBA 一切都很好 但我发现有几种可能的格式 例如YUV420 YUV422等等 因此 据我所知 要进行转换 我需要
  • Android 4.2以下如何设置layoutDirection为RTL

    尝试将布局元素设置为 RTL 顺序 4 2 及以上行 layoutDirection rtl 并在清单中 android supportsRtl true 工作得很好 但对于 4 2 以下则不然 解决方案有人吗 只需使用视图兼容使用 and
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 运行 Espresso 测试时在 Android studio 中找不到属性 android:forceQueryable

    我已经使用 android studio 录制了我的 Android 应用程序 Espresso 测试记录浓缩咖啡测试选项中Run菜单 在记录的最后 我用自己的文件名保存了测试 单击保存按钮后 IDE 会自动在以下位置创建文件Android
  • Android - 按下后退按钮时停止 AsyncTask 并返回到上一个 Activity

    我有一个 AsyncTask 我希望它在按下后退按钮时停止执行 我还希望应用程序返回到之前显示的 Activity 看来我已经成功停止了任务 但应用程序没有返回到之前的活动 有任何想法吗 这是我的代码的摘录 private class My
  • 新的 Android 项目未创建布局或 Java 文件

    这两天我一直在尝试简单地阅读 Big Nerd Ranch Android 编程书 第一章的前几页 我的问题的要点是 当我创建新的 Android 应用程序时 不会创建布局或 java 文件 我已经从 Android 开发站点安装了 ADT
  • Android PhoneGap 中的自定义字体

    我尝试为我的应用程序制作自定义字体 为此 我在 html 文件中编写了以下代码 在我的 HTML 正文中

随机推荐