java - 如何重复 10 次观察并得到 10 次结果?

标签 java android rx-java

我想从一个 observable 中获取结果 10 次,不管是错误还是成功。这是我正在尝试的

mPortalNetworkService.getApi()
            .login(mUsername, mPassword, mEmail)
            .repeat(10)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                println("Finally here -> SUB")
                println(it)
            }, {
                println("Finally here -> Error")
                it.printStackTrace()
            })

我正在调用 rest api 进行日志记录(使用 Retrofit)。我面临的问题是它只返回一次结果。我想要运行此可观察对象的所有 10 次结果。我该怎么做?

最佳答案

不幸的是,没有运算符可以为您组合repeatretry 行为。您可以设置 Hans 建议的基于 range 的解决方案,也可以在 repeatretry 之间共享一个计数器来限制两者:

static <T> ObservableTransformer<T, T> redo(int maxCount) {
    return o -> {
        Observable.defer(() -> {
            AtomicInteger count = new AtomicInteger(maxCount);
            return o.repeat(() -> count.incrementAndGet() < maxCount)
                    .retry(err -> count.incrementAndGet() < maxCount);
        });
    };
}

mPortalNetworkService.getApi()
        .login(mUsername, mPassword, mEmail)
        .subscribeOn(Schedulers.io())
        .compose(redo(10))
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({
            println("Finally here -> SUB")
            println(it)
        }, {
            println("Finally here -> Error")
            it.printStackTrace()
        })

请注意,要确保 login 发生在后台线程上,您必须在重复/重试之前 subscribeOn

关于java - 如何重复 10 次观察并得到 10 次结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49221740/

相关文章:

未找到 Windows 上的 JavaFX 安装

javascript - Java和JavaScript中的运算符>>>有什么区别?

android - 在android中计算用户和POI(兴趣点)之间的角度

java - 线程 "AWT-EventQueue-0"NumberFormatException : empty String 中出现异常

org.apache.catalina.connector.Request.setAttribute 中的 java.lang.NullPointerException

android - 蓝牙设备扫描不完整

Android PreferenceFragment 实现 OnPreferenceClickListener 从不调用点击

java - 忽略 Observable<Single<T>> 中的错误

android - RxJava - 获取列表,对其项目进行操作,再次分组到列表中。 toList() 等待 onCompleted()

JavaRx on ErrorReturn 返回不同的类型