RxJava / RxAndroid + Retrofit,使6个不同的Observable调用asyncronous

时间:2017-07-01 23:20:29

标签: android retrofit rx-java rx-android

我正在学习RxJava / Android(我目前正在将它与Retrofit结合用于网络调用),现在我有一个问题,比如我有6个不同的Observable,像这样:  Observable<Client> clients = apiInterface.getClients() Observable<Orders> orders = apiInterface.getOrders(); Observable<Products> products = apiInterface.getProducts();

等。 apiInterface是Retrofit客户端,getClients等是调用

现在,我如何做这6个不同的调用asyncronous,当所有6个调用完成时 - &gt;做点什么(像dimiss一个进度条)? 当每个呼叫结束时,我将获得数据返回呼叫并通过greenDAO插入。管理将它们同步链接到现在,但是我需要它们在并行任务中被解雇(比如我现在对这些调用的6个AsyncTasks + countDownLatch实现)

1 个答案:

答案 0 :(得分:2)

您应该像这样使用zip运算符:

Observable<Client> clients = apiInterface.getClients()
 Observable<Orders> orders = apiInterface.getOrders();
 Observable<Products> products = apiInterface.getProducts();

Observable<String> clientorders = Observable.zip(
                        clients,
                        orders,
                        products,
                        new Func3<Client, Orders, Products> {
                                @Override
                                public String call(Client client, Orders orders, products products) {


                                      return "progress bar dismissed" ;
                                }
                        }
);     

clientorders.subscribe(new Action1<String>() {

                    @Override
                    public void call(String s) {
                        //action
                        //dimiss progress bar
                    }

                })
}

Zip运算符:http://reactivex.io/documentation/operators/zip.html