rag*_*oid 2 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();
)
Run Code Online (Sandbox Code Playgroud)
当出现类似UnknownHostException,的错误时SocketTimeoutException,我会显示一个重试按钮。单击重试按钮后,我将向PublishSubject().
subject.onNext(boolean Value);
但是在错误出现后,主题正在终止并且没有其他事件被转发。
在快速搜索中,我可以使用Notification<>包装器实现这一点,但还没有找到应用它的好方法。
这是我找到的两个链接:
此链接提到使用Notification.
此链接使用通知,但包装主题的初始类型,即Boolean在通知中。如何将收到的错误和响应包装getSomethingFromServer()到通知中。
我在这里做错了吗?
谢谢
从杰克沃顿那里得到答案:
"getSomethingFromServer()在 flatMap 中映射并添加一个onErrorResume*操作符
封闭的流永远不会终止
.flatMap(b -> getSomethingFromServer()
.map(response -> WrapperType.success(response))
.onErrorReturn(e -> WrapperType.error(e))
)
无论WrapperType你想要什么,Notification或者你自己的”
也来自侯赛因·阿拉丁:https : //twitter.com/Hussein_Ala
" 我以前没有使用Notification过,但我要做的是getSomethingFromServer()用一个事件类包装从它发出的所有东西。事件可以有不同的状态“成功”、“错误”等,然后覆盖onErrorfromgetSomethingFromServer()以返回一个事件。最后你可以处理不同的情况onNext
事件是您将创建的自定义类,您可以onError通过执行以下操作
来覆盖getSomethingFromServer().onErrorReturn((Function<Throwable, Event>) throwable -> new Event(Event.ERROR, throwable))
“
所以这里的诀窍是onErrorReturn()。