g.r*_*ion 7 java android reactive-programming rx-java rx-android
我在android中使用RxJava和RxBindings进行查看.以下是我正在做的事情的一个例子.
RxView.clicks(btMyButton).flatMap(btn -> {
// another observable which can throw onError.
return Observable.error(null);
}).subscribe(object -> {
Log.d("CLICK", "button clicked");
}, error -> {
Log.d("CLICK", "ERROR");
});
Run Code Online (Sandbox Code Playgroud)
当我点击MyButton时,我使用flatMap返回另一个observable,它是一个网络调用,可以返回成功或错误.当它返回错误时我在错误块中处理它.但我无法再次点击该按钮.
如何处理错误并仍然可以再次单击按钮?
GreyBeardedGeek就是现货.要明确您可以使用的一个选项.materialize():
RxView.clicks(btMyButton).flatMap(btn -> {
if (ok)
return someObservable.materialize();
else
return Observable.error(new MyException()).materialize();
}).subscribe(notification -> {
if (notification.hasValue())
Log.d("CLICK", "button clicked");
else if (notification.isOnError())
Log.d("CLICK", "ERROR");
});
Run Code Online (Sandbox Code Playgroud)
顺便说一句,不要将null传递给Observable.error().
我对 RxJava 很陌生,但我自己也遇到过这个问题。
问题在于,根据定义,Observable 在调用它的 error() 方法时将停止发出值。
据我所知,你有两种选择:
修改进行网络调用的 Observable,以便在发生错误时不会引发异常,而是返回一个指示发生错误的值。这样,当发生网络错误时,将不会调用 Observable 的 error() 方法。
考虑使用 Observable.onErrorResumeNext 来覆盖调用 error() 时 Observable 的终止。请参阅 处理 onError 和继续处理的最佳实践
| 归档时间: |
|
| 查看次数: |
3989 次 |
| 最近记录: |