在 Android 应用场景中,我想获取一些 Observable<Data>
来自网络,有多个Observer<Data>
订阅它以更新相应的 View 。如果出现错误(例如超时),请向用户显示一个按钮以重试。
我该如何进行重试部分?我可以告诉可观察对象再次重新执行其逻辑而不重新订阅它吗?
最佳答案
假设您有两个按钮,“重试”和“取消”,最初是隐藏的。创建两个 Observable
s retryButtonClicks
和 cancelButtonClicks
。然后,将 retryWhen
运算符应用于指定的下载流,并对这些按钮点击的信号采取行动:
download.retryWhen(errors -> {
return errors
.observeOn(AndroidSchedulers.mainThread())
.flatMap(e -> {
// show the "Retry" and "Cancel" buttons around here
return Observable.amb(
retryButtonClicks.take(1).map(v -> "Retry"),
cancelButtonClicks.take(1).map(v -> "Cancel")
)
.doOnNext(v -> { /* hide the "Retry" and "Cancel" buttons */ });
})
.takeWhile(v -> "Retry".equals(v))
;
});
关于android - 重新执行一个 observable 来通知当前订阅的观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478800/