【问题标题】:Combine data from multiple API calls using retrofit and RxJava (Android)使用改造和 RxJava (Android) 组合来自多个 API 调用的数据
【发布时间】:2018-01-02 19:53:18
【问题描述】:

我想做的是访问几个不同 URL 的数据,组合这些数据,然后在我的应用程序中使用它。我可以轻松获取所需的所有数据,但我不知道如何将数据组合到一个列表中并知道所有 API 调用何时完成(所有数据都在列表)。

这是我进行 API 调用的循环:

for(String diningCourt: diningCourts){
        menuApi.getMenu(diningCourt, date)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(responseData -> {

                     //I want to add responseData to a list with 
                     //the results from the rest of the calls 

                });
    }

收集数据的正确方法是什么?我尝试使用静态类变量来存储结果,但我最终只得到来自 API 调用之一的数据。任何建议将不胜感激。

【问题讨论】:

    标签: java android retrofit2 rx-java2


    【解决方案1】:

    我们使用“combineLatest”见http://reactivex.io/documentation/operators/combinelatest.html 使用此运算符,两个调用都会执行,并且当两个调用都完成时,您会得到一个结果。

    Observable.combineLatest(observable1, observable2, (result1, result2) -> { //use both results })
    

    【讨论】:

    • 我在让它工作时遇到了一些麻烦。我需要对 observables 做些什么吗?目前我有这个,我无法显示打印语句:Observable.combineLatest(observables.get(0), observables.get(1), (result1, result2) -> { System.out.println("HERE"); return null; });(其中 observables 是改造调用生成的 Observable 对象列表)
    • 你必须订阅 observable。否则项目不会从源中提取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多