使用 rxjava 同步方法
Sync methods using rxjava
我有以下这些场景 -
- 假设我有 2 个异步回调(假设我正在调用 2 个 diff api)方法回调 1(数据 d1)和回调 2(数据 d2),基于 d1 和 d2(即当两个回调方法都被调用时)我必须调用一个方法,比如 setupUI(),如何使用 RxJava 有效地做到这一点
- 有两个 viewpager v1 和 v2 需要同步,即在 v1 上 pagechange v2 也将更改其当前页面(索引将相同),反之亦然,使用 Rxjava
尝试将主题放入回调中以将它们转换为 rx 流。
然后你可以压缩这两个主题并订阅压缩的可观察对象以同时获得两个回调的结果
示例:让我们制作两个主题
PublishSubject<Data> subject1 = PublishSubject.create();
PublishSubject<Data> subject2 = PublishSubject.create();
我们可以使用这些将我们的回调转换成我们可以像这样订阅的东西:
public void callback1(Data d1) {
subject1.onNext(d1);
}
public void callback2(Data d2) {
subject2.onNext(d2);
}
现在我们可以得到当它们都发出这样的东西时的输出:
class DataDto {
Data data1;
Data data2;
DataDto(Data data1, Data data2) {
this.data1 = data1;
this.data2 = data2;
}
}
public void main() {
Observable.zip(subject1, subject2, new BiFunction<Data, Data, DataDto>() {
@Override
public DataDto apply(@NonNull Data data1, @NonNull Data data2) throws Exception {
return new DataDto(data1, data2);
}
}).subscribe(new Consumer<DataDto>() {
@Override
public void accept(@NonNull DataDto dataDto) throws Exception {
//do something
}
});
}
zip 所做的是等待两个流都发出,然后将其作为一个项目发出。
这里我们制作了一个包含data1和data2的DataDto
希望对您有所帮助
我有以下这些场景 -
- 假设我有 2 个异步回调(假设我正在调用 2 个 diff api)方法回调 1(数据 d1)和回调 2(数据 d2),基于 d1 和 d2(即当两个回调方法都被调用时)我必须调用一个方法,比如 setupUI(),如何使用 RxJava 有效地做到这一点
- 有两个 viewpager v1 和 v2 需要同步,即在 v1 上 pagechange v2 也将更改其当前页面(索引将相同),反之亦然,使用 Rxjava
尝试将主题放入回调中以将它们转换为 rx 流。
然后你可以压缩这两个主题并订阅压缩的可观察对象以同时获得两个回调的结果
示例:让我们制作两个主题
PublishSubject<Data> subject1 = PublishSubject.create();
PublishSubject<Data> subject2 = PublishSubject.create();
我们可以使用这些将我们的回调转换成我们可以像这样订阅的东西:
public void callback1(Data d1) {
subject1.onNext(d1);
}
public void callback2(Data d2) {
subject2.onNext(d2);
}
现在我们可以得到当它们都发出这样的东西时的输出:
class DataDto {
Data data1;
Data data2;
DataDto(Data data1, Data data2) {
this.data1 = data1;
this.data2 = data2;
}
}
public void main() {
Observable.zip(subject1, subject2, new BiFunction<Data, Data, DataDto>() {
@Override
public DataDto apply(@NonNull Data data1, @NonNull Data data2) throws Exception {
return new DataDto(data1, data2);
}
}).subscribe(new Consumer<DataDto>() {
@Override
public void accept(@NonNull DataDto dataDto) throws Exception {
//do something
}
});
}
zip 所做的是等待两个流都发出,然后将其作为一个项目发出。
这里我们制作了一个包含data1和data2的DataDto
希望对您有所帮助