RxView.clicks()在onError事件

时间:2018-03-12 12:48:48

标签: android kotlin rx-java rx-java2 rx-binding

以下是使用RxBindings的示例Rx链:

RxView.clicks(refreshIcon)
        .flatMap { Observable.error<Throwable>(IllegalArgumentException()) }
        .subscribe(
                { Timber.d("onNext")},
                { error -> Timber.d("onError") })
        .addTo(disposables)

点击我的刷新图标一次后,当终端事件发生时,此链不会再次运行。我猜我的错误印象是,只要检测到点击事件,订阅就会发生,并且无论何时执行该代码块,它都会订阅。

问题是我怎样才能让我的链在每次点击时执行/重新执行,即使它遇到终端事件?寻找直观的东西。

2 个答案:

答案 0 :(得分:1)

当第一个错误发生时,

Observable必须完成,它在合同中。为了让你的Observable幸存终结事件,你将不得不深入研究RxJava Error handling operatorsretry()似乎非常适合您的情况:

RxView.clicks(refreshIcon)
        .flatMap { ... }
        .retry()
        .subscribe(...)
        .addTo(disposables)

答案 1 :(得分:1)

当发生错误时,它将是Rx合约的一部分,流将接收onError事件并将终止。 除非您主动处理错误,否则使用例如:onErrorResumeNext()