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

时间:2016-06-14 12:26:08

标签: android rx-java retrofit2 rx-android

我使用rxjava扩展名

进行改造2

我有3个Observables可以做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. 分别运行每个可观察的
  2. 将其中三个一起运行并等待它们完成以显示结果
  3. 按顺序运行它们并逐个获取结果。
  4. 如何通过Retrofit向Rxjava发送最后两个选项?

1 个答案:

答案 0 :(得分:3)

使用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

最好的问候。