[英]don't re-execute request while user is clicking repeatedly on fetch data button using rxbinding and rxjava
[英]Re-execute an observable to notify currently subscribed observers
在一个Android应用程序场景中,我想从网络获取一些Observable<Data>
,并且有多个Observer<Data>
订阅了它以更新相应的视图。 如果发生错误(例如超时),请向用户显示一个按钮以重试。
我该怎么做再试? 我可以告诉可观察对象重新执行其逻辑而不重新订阅吗?
假设您有两个按钮“ Retry”和“ Cancel”,它们最初是隐藏的。 创建两个Observable
的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))
;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.