Ожидание пары наблюдаемых, чтобы закончить с / без последовательности 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 варианта здесь,
- Запустите каждую наблюдаемую отдельно
- Запустите три из них вместе и дождитесь их окончания, чтобы показать результат
- Запустите их последовательно и получите результат один за другим.
Как мы можем сделать последние 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.
С наилучшими пожеланиями.