使用rxjava的同步方法

使用rxjava的同步方法,java,android,rx-java2,Java,Android,Rx Java2,我有以下几种情况- 假设我有两个异步回调(假设我调用了两个不同的API)方法callback1(数据d1)和callback2(数据d2),基于d1和d2(即当两个回调方法都被调用时),我必须调用一个方法Say setupUI(),如何使用RxJava高效地做到这一点 有两个ViewPager v1和v2需要同步,即在v1上,pagechange v2也将使用Rxjava更改其当前页面(索引将相同),反之亦然 尝试将主题放在回调中,以将它们转换为rx流 然后,您可以压缩这两个主题并订阅压缩后的可

我有以下几种情况-

  • 假设我有两个异步回调(假设我调用了两个不同的API)方法callback1(数据d1)和callback2(数据d2),基于d1和d2(即当两个回调方法都被调用时),我必须调用一个方法Say 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
            }
        });
    }
    
    classdatadto{
    数据1;
    数据2;
    DataDto(数据data1、数据data2){
    this.data1=data1;
    this.data2=data2;
    }
    }
    公共图书馆{
    zip(subject1,subject2,新的双函数(){
    @凌驾
    要应用的公共数据(@NonNull Data data1,@NonNull Data data2)引发异常{
    返回新的数据到(数据1,数据2);
    }
    }).订阅(新消费者){
    @凌驾
    public void accept(@NonNull DataDto DataDto)引发异常{
    //做点什么
    }
    });
    }
    
    zip所做的是等待两个流都发出,然后作为一个项目发出

    这里我们制作了一个DataDto,它包含data1和data2


    希望这有帮助

    谢谢代码,我已经解决了这样的问题,而不是使用DisposableObserver