PublishSubject 在 `onError()` 后停止发射
PublishSubject stops emitting after `onError()`
RxJava 查询:
嗨,
我有一个PublishSubject<Boolean> subject = PublishSubject.create()
;
我正在订阅上述主题并在此之后进行 API 调用:
subject.observeOn(IOThread)
.flatMap(boolean -> getSomethingFromServer())
.observeOn(MainThread)
.subscribe(something ->
showSomethingOnView(),
error -> showRetryView();
)
当出现 UnknownHostException
、SocketTimeoutException
等错误时,我会显示重试按钮。单击重试按钮后,我将向 PublishSubject()
发送一个事件。
subject.onNext(boolean Value)
;
但是在错误出现后,主题正在终止并且没有其他事件被转发。
通过快速搜索,我可以使用 Notification<>
包装器实现此目的,但还没有找到应用它的好方法。
这是我找到的两个链接:
This link提到使用Notification
.
使用 Notification 但包装了 Subject 的初始类型,即 Boolean
在 Notification 中。如何将从 getSomethingFromServer()
获得的错误和响应包装到通知中。
我是不是做错了什么?
谢谢
从 Jake Wharton 那里得到了答案:
"在 flatMap 中映射 getSomethingFromServer()
并添加一个 onErrorResume*
运算符
然后封闭流将永远不会终止
.flatMap(b -> getSomethingFromServer()
.map(response -> WrapperType.success(response))
.onErrorReturn(e -> WrapperType.error(e))
)
随心所欲 WrapperType
,Notification
或你自己的
也来自侯赛因·阿拉丁:https://twitter.com/Hussein_Ala
" 我以前没有使用过 Notification
,但我要做的是用事件 class 包装从 getSomethingFromServer()
发出的所有内容。事件可以有不同的状态 "Success"、"Error" 等等,然后将 onError
从 getSomethingFromServer()
覆盖为 return 一个事件。
最后你可以处理 onNext
中的不同情况
事件是您要创建的自定义 class,您可以通过执行类似这样的操作来覆盖 onError
getSomethingFromServer().onErrorReturn((Function<Throwable, Event>) throwable -> new Event(Event.ERROR, throwable))
“
所以这里的技巧是 onErrorReturn()
。
RxJava 查询:
嗨,
我有一个PublishSubject<Boolean> subject = PublishSubject.create()
;
我正在订阅上述主题并在此之后进行 API 调用:
subject.observeOn(IOThread)
.flatMap(boolean -> getSomethingFromServer())
.observeOn(MainThread)
.subscribe(something ->
showSomethingOnView(),
error -> showRetryView();
)
当出现 UnknownHostException
、SocketTimeoutException
等错误时,我会显示重试按钮。单击重试按钮后,我将向 PublishSubject()
发送一个事件。
subject.onNext(boolean Value)
;
但是在错误出现后,主题正在终止并且没有其他事件被转发。
通过快速搜索,我可以使用 Notification<>
包装器实现此目的,但还没有找到应用它的好方法。
这是我找到的两个链接:
This link提到使用Notification
.
Boolean
在 Notification 中。如何将从 getSomethingFromServer()
获得的错误和响应包装到通知中。
我是不是做错了什么?
谢谢
从 Jake Wharton 那里得到了答案:
"在 flatMap 中映射 getSomethingFromServer()
并添加一个 onErrorResume*
运算符
然后封闭流将永远不会终止
.flatMap(b -> getSomethingFromServer()
.map(response -> WrapperType.success(response))
.onErrorReturn(e -> WrapperType.error(e))
)
随心所欲 WrapperType
,Notification
或你自己的
也来自侯赛因·阿拉丁:https://twitter.com/Hussein_Ala
" 我以前没有使用过 Notification
,但我要做的是用事件 class 包装从 getSomethingFromServer()
发出的所有内容。事件可以有不同的状态 "Success"、"Error" 等等,然后将 onError
从 getSomethingFromServer()
覆盖为 return 一个事件。
最后你可以处理 onNext
事件是您要创建的自定义 class,您可以通过执行类似这样的操作来覆盖 onError
getSomethingFromServer().onErrorReturn((Function<Throwable, Event>) throwable -> new Event(Event.ERROR, throwable))
“
所以这里的技巧是 onErrorReturn()
。