android - 重新执行一个 observable 来通知当前订阅的观察者

标签 android rx-java2 rx-android

在 Android 应用场景中,我想获取一些 Observable<Data>来自网络,有多个Observer<Data>订阅它以更新相应的 View 。如果出现错误(例如超时),请向用户显示一个按钮以重试。

我该如何进行重试部分?我可以告诉可观察对象再次重新执行其逻辑而不重新订阅它吗?

最佳答案

假设您有两个按钮,“重试”和“取消”,最初是隐藏的。创建两个 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))
    ;
});

关于android - 重新执行一个 observable 来通知当前订阅的观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478800/

相关文章:

android - Gradle 同步失败 : Support for builds using Gradle versions older than 2. 6 已删除 [...]。您当前使用的是 Gradle 版本 2.2.1

Android Speech to Text Api Google - 通知

java - 在 Android 模拟器或设备上运行 Java SE 库的 JUnit 测试

android - RxAndroid 的 Realm 没有获取最新的数据更改

java - 将参数发送到订阅 CompositeDisposable 的方法 - Android?

android - android 中谷歌地图中的自定义标记

android - 无法解析方法 SubscribeOn - RxJava

rx-java - 如何使用 RxJava 从另一个流实现过滤器

java - RxJava 和长时间运行的监听器

android - 如何在 MediaPlayer 应用程序中限制/去抖搜索栏搜索事件