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
。
This link使用通知,但在通知中包含主题的初始类型,即Boolean
。如何将从getSomethingFromServer()
获取的错误和响应包装到通知中。
我在这里做错了吗?
由于
答案 0 :(得分:2)
得到了 Jake Wharton 的答案:
在flatMap中“映射getSomethingFromServer()
并添加onErrorResume*
运算符
封闭流永远不会终止
.flatMap(b -> getSomethingFromServer()
.map(response -> WrapperType.success(response))
.onErrorReturn(e -> WrapperType.error(e))
)
适用于您想要的任何WrapperType
,Notification
或您自己的“
同样来自 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))
。