Ожидание пары наблюдаемых, чтобы закончить с / без последовательности Retrofit2 с rxjava - Android

Я использую модификацию 2 с расширением rxjava

У меня есть 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. Запустите их последовательно и получите результат один за другим.

Как мы можем сделать последние 2 варианта в Rxjava, когда эти три наблюдаемые были отправлены нам Retrofit?

1 ответ

Решение

Вторые варианты, которые вы можете получить, используя 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.

Второй, который вы получите с помощью 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.

С наилучшими пожеланиями.

Другие вопросы по тегам