重新执行一个可观察对象以通知当前订阅的观察者

Re-execute an observable to notify currently subscribed observers

在一个Android应用场景中,我想从网络中获取一些Observable<Data>,并且有多个Observer<Data>订阅它来更新相应的视图。如果出现错误 - 比如说超时 - 向用户显示一个按钮以重试。

我怎样才能重试部分?我可以告诉 observable 在不重新订阅它的情况下再次重新执行它的逻辑吗?

其实是有具体方法的

retry()

Returns an Observable that mirrors the source Observable, resubscribing to it if it calls onError (infinite retry count).

retry(long count)

Returns an Observable that mirrors the source Observable, resubscribing to it if it calls onError up to a specified number of retries.

阅读更多 article and in the docs

假设您有两个按钮,"Retry" 和 "Cancel",最初是隐藏的。创建两个 Observables retryButtonClickscancelButtonClicks。然后,将 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))
    ;
});