在 RxJava 中,如何在错误时重试/恢复,而不是完成可观察的

2024-04-18

我想要实现的是:

  • 监控特定变化的偏好
  • 当检测到更改时,使用新值启动新的网络调用
  • 变换结果
  • 在 UI 中显示结果

我知道更改何时发生,现在我认为我需要对某个主题调用 onNext 。然后这应该会触发 Rx 链,最后我可以更新 UI。

mViewPeriodSubject = PublishSubject.create();

mAdapterObservable =
    mViewPeriodSubject
        .flatMap(period -> MyRetrofitAPI.getService().fetchData(period)) // this might fail
        .flatMap(Observable::from)
        .map(MyItem::modifyItem)
        .toList()
        .map(obj -> new MyAdapter(obj));


mViewPeriodSubject.onNext("week"); // this one starts the chain
mViewPeriodSubject.onNext("year"); // this one does not

但在网络调用失败的情况下,可观察到的错误,并且调用 onNext() 不会导致另一个网络调用。

所以我的问题是,我应该如何处理这个问题?我怎样才能保持 Observable 完整,以便我可以向它抛出另一个值?例如,我可以想象一个简单的重试按钮,它只想忽略发生错误的事实。


您不必处理您的错误mViewPeriodSubject相反,处理改造后的 Observable 中的错误。这个改造后的 Observable 不会恢复,但至少,它不会影响你的“主”Observable。

mAdapterObservable =
mViewPeriodSubject
    .flatMap(period -> MyRetrofitAPI.getService().fetchData(period).onErrorResumeNext(e -> Observable.empty()) // this might fail
    .flatMap(Observable::from)
    .map(MyItem::modifyItem)
    .toList()
    .map(obj -> new MyAdapter(obj));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 RxJava 中,如何在错误时重试/恢复,而不是完成可观察的 的相关文章

随机推荐

  • 无法消除我的子图像和父 div 之间奇怪的 2px 空间

    我已经尝试了我所知道的一切 我开始认为它是由 Tumblrs javascript 创建的 首先 我确实有内联块 我知道它们读取空白并添加像素 但经过多次测试 剥离了我所有的 javascript 并删除了所有内容 只留下了一个标准 div
  • 在 WPF 中将项目添加到组合框

    当我向 WPF 窗口添加组合框时 如何向组合框添加项目 Int 设计的 XAML 代码还是在 NameOfWindow xaml cs 文件中 情况 1 您没有数据源 您只需填充ComboBox静态值如下 来自 XAML
  • 在 Pycharm 中过滤记录器控制台输出的简单方法?

    我已经通过该程序命名了我的所有记录器 我想做的是能够通过 Pycharm 中的记录器名称过滤控制台日志输出 可以在不编辑日志配置文件的情况下完成此操作吗 您可以使用以下命令在 PyCharm 的控制台窗口中过滤输出格雷普控制台 https
  • 如何非递归地获取二叉树中叶节点的数量?

    我有一个练习问题被难住了 在不使用递归的情况下获取二叉树中叶节点的数量 我已经四处寻找一些想法 我已经看到了一些想法 例如将节点传递到堆栈 但我不知道当有多个分支时如何做到这一点 任何人都可以提供指针吗 NumberOfLeafNodes
  • 为每个文件运行气流 DAG

    所以我在airflow中有一个非常好的DAG 它基本上在二进制文件上运行几个分析步骤 作为airflow插件实现 DAG 由 ftp 传感器触发 该传感器仅检查 ftp 服务器上是否有新文件 然后启动整个工作流程 所以目前的工作流程是这样的
  • 将数据从浏览器发送到服务器并返回

    我是 C 开发人员 很长一段时间以来我没有真正跟进任何与 Web 相关的开发 我有一个想要实施的项目 实际上是为了赶上这些技术 我的项目是这样的 在浏览器中显示一些内容 例如使用画布和 WebGL 的 3D 场景的内容 在页面上有一个按钮
  • 从出生日期提取的年龄总是出现不一致的情况

    我使用以下代码将用户提供的出生日期转换为当前日期的等效年份 输出在年份中的偏差总是不一致 而在天和月中的偏差则非常大 NSDateFormatter tempFormatter NSDateFormatter alloc init temp
  • 为静态库编译 SWIG Python 包装器?

    这是一个菜鸟问题 我正在尝试学习如何使用 SWIG 为 C 库制作 python 接口 该库是专有的第三方库 它以头文件 foo h 和静态存档 libfoo a 的形式出现在我面前 为了简化问题 我编造了一个我认为具有相同病理学的例子 无
  • pdfkit-警告:阻止访问文件

    在 HTML 文件中使用本地图像时 使用 pdfkit 库将 HTML 转换为 pdf 时出现错误 阻止对文件的访问 如何在 HTML 文件中使用本地图像 我遇到了同样的问题 我通过向 pdfkit from file 添加 enable
  • 深层复制 System.Windows.Forms.WebBrowser 对象/恢复状态

    本质上 我想要做的是复制一个 WebBrowser 对象 以便我可以执行相当于 在新选项卡中打开 或 在新窗口中打开 操作 从而维护任何已发布的数据 我不仅仅想导航到与原始 WebBrowser 对象中相同的 URL 而是想重复 HttpW
  • 许多库上的 APK META-INF 中复制的重复文件?

    我在尝试构建 APK 时收到此错误 错误 任务 app transformResourcesWithMergeJavaResForDebug 执行失败 com android build api transform TransformExc
  • 为什么我应该使用&而不是&?

    我为什么要使用 amp 代替 为我的网站编写 HTML 时 在哪里可以找到我应该编码的其他符号的列表 酒吧 也是吧 如果我将符号按原样粘贴到 html 中 可能会遇到什么问题 事情是 我有一些附属链接 我担心 如果我在某些情况下用 编写它们
  • PTVS 和 numpy System.Int64 转换中的 numpy 64 位支持

    我正在尝试使用 IronPython 和 numpy 编写一些调用 NET 程序集的代码 版本信息 numpy 2 0 0 1 scipy 1 0 0 2 铁Python 2 7 1 我根据此处给出的说明安装了 scipy 和 numpy
  • UIViewContentModeScaleAspectFill 不裁剪

    我正在尝试使用以下命令以固定尺寸 100x100 绘制一些缩略图UIImageView 我将图像视图的帧大小设置为 100x100 并将contentMode to UIViewContentModeScaleAspectFill 我的理解
  • ruby irb 在 Windows 上使用 gitbash shell - 无法使用箭头键修改命令输入?

    当我执行 Rails Console 时 我的 git bash shell 允许我使用向上箭头来调用命令 并使用向左 向右箭头来修改我输入的文本 当我跑步时irbshell 忽略退格键和箭头键 我不确定为什么箭头键在 Rails 控制台的
  • 使用数据中的参数调用 C# 方法

    比如说 我有一个像这样的 XML 字符串
  • 加载Python lib'/tmp/_MEItueAuk/libpython3.7m.so.1.0'时出错:dlopen:/lib/x86_64-linux-gnu/libc.so.6:找不到版本“GLIBC_2.28”

    我已经安装了minidcos https minidcos readthedocs io 使用下面的命令 curl fail L https github com dcos dcos e2e releases download 2019 1
  • 如何在Android中渲染OBJ或FBX? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有几个 obj 和 fbx 格式的 3D 对象 其中包含 mtl 和纹理文件 我想知道哪个是在 An
  • 嵌套 foreach 到 Linq [重复]

    这个问题在这里已经有答案了 我是 LINQ 新手 请帮助我将这行嵌套代码转换为 LINQ foreach var rule in rules foreach var package in packages if rule KeyFrom p
  • 在 RxJava 中,如何在错误时重试/恢复,而不是完成可观察的

    我想要实现的是 监控特定变化的偏好 当检测到更改时 使用新值启动新的网络调用 变换结果 在 UI 中显示结果 我知道更改何时发生 现在我认为我需要对某个主题调用 onNext 然后这应该会触发 Rx 链 最后我可以更新 UI mViewPe