java - Rx Java mergeDelayError 未按预期工作

标签 java android rx-java rx-android

我在 RxAndroid 和 Android 应用程序中使用 RxJava。我正在使用 mergeDelayError将两个 Retro fit 网络调用组合成一个 observable,如果其中一个发出一个,它将处理发出的项目,如果有一个则处理错误。这不起作用,它只会在遇到错误时触发 onError 操作。现在为了测试这一点,我转向了一个非常简单的示例,当我调用 onError 时,仍然不会调用successAction。请参见下面的示例。

Observable.mergeDelayError(
                Observable.error(new RuntimeException()),
                Observable.just("Hello")
            )
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .finallyDo(completeAction)
            .subscribe(successAction, errorAction);

只有当我使用两个成功的 observable 时才会调用成功操作。我是否遗漏了一些关于 mergeDelayError 应该如何工作的东西?

编辑:

我发现如果我删除 observeOnsubscribeOn 一切都会按预期工作。我需要指定线程并认为这就是使用 Rx 的全部意义所在。知道为什么指定这些 Scheduler 会破坏行为吗?

最佳答案

使用 .observeOn(AndroidSchedulers.mainThread(), true) 代替 .observeOn(AndroidSchedulers.mainThread()

public final Observable<T> observeOn(Scheduler scheduler, boolean delayError) {
        return observeOn(scheduler, delayError, RxRingBuffer.SIZE);
    }

上面是observeOn函数的签名。以下代码有效。

  Observable.mergeDelayError(
                Observable.error(new RuntimeException()),
                Observable.just("Hello")
        )
                .observeOn(AndroidSchedulers.mainThread(), true)
                .subscribeOn(Schedulers.io())
                .subscribe(new Subscriber<String>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(String s) {

                    }
                });

从 ConcatDelayError 线程中得到这个技巧:https://github.com/ReactiveX/RxJava/issues/3908#issuecomment-217999009

关于java - Rx Java mergeDelayError 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131594/

相关文章:

java - 如何重置 URL 连接

java - 掷骰子 - ArrayIndexOutOfBounds

java - Android 初学者 - 在不同 Activity 中使用变量或文件的方法?

android - 单击按钮 10 秒后如何使 imageView 可见?

android - 将数组保存到共享首选项并在 ListView 中显示它

java - Log4j2 RegexFilter 模式不匹配

android - 更改 xml 使我的应用程序崩溃

observable - 为什么需要在 `toBlocking` 之前调用 `single` ?

java - RxJava2 - Mutlicasting Singles、Maybes 和 Completables?

java - SubscibeOn 对主题没有影响