PublishSubject在`onError()`

时间:2017-06-20 16:16:52

标签: java android rx-java rx-java2

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()获取的错误和响应包装到通知中。

我在这里做错了吗?

由于

1 个答案:

答案 0 :(得分:2)

得到了 Jake Wharton 的答案:

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

封闭流永远不会终止

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

适用于您想要的任何WrapperTypeNotification或您自己的“

同样来自 Hussein Aladdin https://twitter.com/Hussein_Ala

“之前我没有使用Notification,但我要做的是将getSomethingFromServer()发出的所有内容与事件类包装起来。事件可以有不同的状态”成功“,”错误“等等单击,然后覆盖onError的{​​{1}}以返回事件。 最后,您可以在getSomethingFromServer()

中处理不同的案例

事件是您要创建的自定义类,您可以通过执行此类操作来覆盖onNext onError

所以这里的诀窍是getSomethingFromServer().onErrorReturn((Function<Throwable, Event>) throwable -> new Event(Event.ERROR, throwable))