android - 等待几个 observable 完成有/没有序列 Retrofit2 with rxjava - Android

标签 android rx-java retrofit2 rx-android

我使用带有 rxjava 扩展的 retrofit 2

我有 3 个 Observable,它们会做 3 个不同的事情

Observable<String> observable1 = RetrofitInterface.GetByID(id);
Observable<String> observable2 = RetrofitInterface.GetByKey(key);
Observable<String> observable3 = RetrofitInterface.GetByValue(value);

现在用户可以选择同时运行它们

为了运行它们,我这样做:

observable1.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .unsubscribeOn(Schedulers.io())
                .subscribe(new Subscriber<String>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onNext(String str1) {
                        // do some stuff here
                    }
                });

用户在这里有 3 个选项,

  1. 分别运行每一个 observable
  2. 一起运行其中的三个并等待它们完成以显示结果
  3. 依次运行它们并一个一个地得到结果。

如果 Retrofit 将这三个可观察值发送给我们,我们如何在 Rxjava 中执行最后两个选项?

最佳答案

您可以使用 zip 访问第二个选项,如下所示:

public class ExampleUnitTest {
    @Test
    public void testSample() throws Exception {
        Observable<String> observable1 = Observable.just("I");
        Observable<String> observable2 = Observable.just("Love");
        Observable<String> observable3 = Observable.just("RxJava");

        Observable.zip(observable1, observable2, observable3,
                (s1, s2, s3) -> {
                    return String.format("%s %s %s", s1, s2, s3);
                }
        ).subscribe(System.out::println);
    }
}

它将打印I Love RxJava。看看zip documentations .

你用 concat 实现的第二个,检查一下:

public class ExampleUnitTest {
    @Test
    public void testSample() throws Exception {
        Observable<String> observable1 = Observable.just("I");
        Observable<String> observable2 = Observable.just("Love");
        Observable<String> observable3 = Observable.just("RxJava");

        Observable.concat(observable1, observable2, observable3)
                .subscribe(System.out::println);
    }
}

它将打印:

I
Love
RxJava

看看concat documentation也。

最好的问候。

关于android - 等待几个 observable 完成有/没有序列 Retrofit2 with rxjava - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37811984/

相关文章:

java - 改造在onResponse方法之外返回null?

android - ImageButton Border Transparancy - 删除圆形图像周围的方形边框不起作用?

android - 是否可以通过 NFC 在两个设备之间进行双向通信?

java - RxJava : Calling . subscribe() 使用相同的观察者来处理多个 Observables

java - 在回调 rxjava 中返回 Observable

unit-testing - rxjava testScheduler竞争条件

java - 不能将父类型用作变量类型,但仍可以接收子类型

android - 无法使用改造 android 库在编译时出错

android - BuildConfig.DEBUG 在哪里?

android - 在 Android Studio 中使用 maven 模块