【问题标题】:PublishSubject stops emitting after `onError()`PublishSubject 在 `onError()` 后停止发射
【发布时间】:2017-06-21 02:00:35
【问题描述】:

RxJava 查询

嗨,

我有一个PublishSubject<Boolean> subject = PublishSubject.create()

我正在订阅上述主题并在此之后进行 API 调用:

subject.observeOn(IOThread)
    .flatMap(boolean -> getSomethingFromServer())
    .observeOn(MainThread)
    .subscribe(something ->
        showSomethingOnView(),
        error -> showRetryView();
    )

当出现UnknownHostExceptionSocketTimeoutException 之类的错误时,我会显示重试按钮。单击重试按钮后,我将向PublishSubject() 发送一个事件。

subject.onNext(boolean Value);

但是在错误出现之后,主题正在终止并且没有其他事件被转发。

在快速搜索中,我可以使用 Notification<> 包装器实现此目的,但还没有找到应用它的好方法。

这是我找到的两个链接:

This link 提到了Notification 的使用。

This link 使用通知,但将主题的初始类型,即Boolean 包装在通知中。如何将从getSomethingFromServer() 收到的错误和响应包装到通知中。

我在这里做错了吗?

谢谢

【问题讨论】:

    标签: java android rx-java rx-java2


    【解决方案1】:

    杰克·沃顿那里得到了答案:

    "在 flatMap 中映射 getSomethingFromServer() 并添加 onErrorResume* 运算符

    封闭的流将永远不会终止

    .flatMap(b -> getSomethingFromServer() .map(response -> WrapperType.success(response)) .onErrorReturn(e -> WrapperType.error(e)) )

    无论WrapperType 你想要什么,Notification 或你自己的”

    也来自 侯赛因·阿拉丁https://twitter.com/Hussein_Ala

    " 我以前没有使用过Notification,但我会用事件类包装从getSomethingFromServer() 发出的所有内容。事件可以有不同的状态“成功”、“错误”等,然后覆盖 onErrorgetSomethingFromServer() 也返回一个事件。 终于可以在onNext处理不同的情况了

    Event 是您将创建的自定义类,您可以通过执行以下操作来覆盖 onError getSomethingFromServer().onErrorReturn((Function<Throwable, Event>) throwable -> new Event(Event.ERROR, throwable)) "

    所以这里的诀窍是onErrorReturn()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多