使用rxjava同步方法

时间:2017-05-25 06:44:02

标签: java android rx-java2

我有以下几种情况 -

  1. 说我有2个异步回调(想象一下我调用2个差异apis)方法callback1(数据d1)和callback2(数据d2),基于d1和d2(即当调用两个回调方法时)我必须调用方法说setupUI(),如何使用RxJava
  2. 有效地做到这一点
  3. 有两个需要同步的浏览器v1和v2,即在v1页面转换v2也将更改其当前页面(索引将是相同的),反之亦然,使用Rxjava

1 个答案:

答案 0 :(得分:1)

尝试将主题放入回调中以将其转换为rx流。

然后你可以将两个主题压缩并订阅压缩的observable以同时获得两个回调的结果

示例:让我们制作两个主题

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
        }
    });
}

在两个流都发出之前它会等待什么拉链,然后将其作为一个项目发出。

这里我们创建了一个包含data1和data2

的DataDto

希望这有帮助