Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RxView.clicks()在onError事件后死亡_Android_Kotlin_Rx Java_Rx Java2_Rx Binding - Fatal编程技术网

Android RxView.clicks()在onError事件后死亡

Android RxView.clicks()在onError事件后死亡,android,kotlin,rx-java,rx-java2,rx-binding,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") })

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

RxView.clicks(refreshIcon)
        .flatMap { Observable.error<Throwable>(IllegalArgumentException()) }
        .subscribe(
                { Timber.d("onNext")},
                { error -> Timber.d("onError") })
        .addTo(disposables)
RxView.点击(刷新图标)
.flatMap{Observable.error(IllegalArgumentException())}
.订阅(
{Timber.d(“onNext”)},
{error->Timber.d(“onError”)})
.addTo(一次性用品)
单击一次“我的刷新”图标后,此链将不会在终端事件发生时再次运行。我猜我有一个错误的印象,即每当检测到一个点击事件时,就会进行订阅,而实际上,每当执行该代码块时,就会进行订阅


问题是我如何使我的链在每次点击时执行/重新执行,即使在点击终端事件之后?寻找直观的东西。

可观察的必须在第一个错误发生时完成,这是在他们的合同中。为了让您的
可以观察到
在终端事件中幸存下来,您必须深入研究RxJava。似乎很适合你的情况:

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

它是Rx合同的一部分,当发生错误时,流将接收onError事件并终止。
除非如我所怀疑的那样,使用例如:onErrorResumeNext()

主动处理错误。如果我使用单子,链不会终止吗?我猜我只是在subscribe()块中处理monad?我为您添加了相关的示例。我还删除了单子的题外话,因为它比帮助更令人困惑。在monad中包装将终止,除非您自己编写一些复杂的运算符。这似乎有效。因此,在观察热源时,“重试”将重新订阅,但将等待下一次发射。很高兴知道这一点。谢谢。既然问题解决了,也许你可以接受这个答案。