以下是使用RxBindings的示例Rx链:
RxView.clicks(refreshIcon)
.flatMap { Observable.error<Throwable>(IllegalArgumentException()) }
.subscribe(
{ Timber.d("onNext")},
{ error -> Timber.d("onError") })
.addTo(disposables)
点击我的刷新图标一次后,当终端事件发生时,此链不会再次运行。我猜我的错误印象是,只要检测到点击事件,订阅就会发生,并且无论何时执行该代码块,它都会订阅。
问题是我怎样才能让我的链在每次点击时执行/重新执行,即使它遇到终端事件?寻找直观的东西。
答案 0 :(得分:1)
Observable
必须完成,它在合同中。为了让你的Observable
幸存终结事件,你将不得不深入研究RxJava Error handling operators。 retry()
似乎非常适合您的情况:
RxView.clicks(refreshIcon)
.flatMap { ... }
.retry()
.subscribe(...)
.addTo(disposables)
答案 1 :(得分:1)
当发生错误时,它将是Rx合约的一部分,流将接收onError事件并将终止。 除非您主动处理错误,否则使用例如:onErrorResumeNext()