等待几个 observable 完成 with/without 序列 Retrofit2 with rxjava - Android
Waiting for couple of observable to finish with/without sequence Retrofit2 with rxjava - Android
我使用带有 rxjava 扩展的改造 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 个选项,
- 运行 每个单独观察
- 运行他们三个在一起,等他们完成后显示结果
- 运行 依次将它们逐一得到结果。
我们如何在 Rxjava 中执行最后两个选项,让 Retrofit 发送给我们这三个可观察值?
您可以使用 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
此致。
我使用带有 rxjava 扩展的改造 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 个选项,
- 运行 每个单独观察
- 运行他们三个在一起,等他们完成后显示结果
- 运行 依次将它们逐一得到结果。
我们如何在 Rxjava 中执行最后两个选项,让 Retrofit 发送给我们这三个可观察值?
您可以使用 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
此致。