RxJava + Retrofit:区分多个请求调用API中的每个请求

时间:2016-11-03 07:52:16

标签: android rx-java retrofit2

我有一份城市名单,我想找到每个城市的天气。 例如我的列表是cities = {london,berlin,headington} 所以,我的代码是每个城市的呼叫api服务。

在我的活动中,这就是我要求每个城市的天气:

for(String element : cities) {
    presenter.getApi(element);
}

并且在实现观察者的演示者中,这是响应结果的代码:

@Override
public void onNext (ResultObject result) {
    // getName() function return city name
    log.d("Result", result.getMain().getName() + result.getWeather().getDescription();
}

因为这个函数(onNext)分别作为请求(我们首先请求伦敦然后请berlin然后是headington),所以我不知道如何区分我的伦敦天气请求与柏林。

此外,在API响应中,它并不总是附加请求城市。如果我要求Headington,回复是牛津。

使用Get的Api服务,下面的链接(返回一个可观察的) http://api.openweathermap.org/data/2.5/weather?q=headington&appid=90faa1669716319e787ca1ab5da48cbc

1 个答案:

答案 0 :(得分:1)

您可以使用flatMap运算符并使getApi返回一个observable,以允许您将报表和城市保持在同一级别。

这是一个例子

@Test
public void flatMapCities(){
    List<String> cities = Arrays.asList("London", "Berlin", "Moscow");
    Observable.from(cities)
            .flatMap(city -> getReport(city)
            .doOnNext(report->checkReport(city, report)));
}

private void checkReport(String city, String report) {
    //TODO:Check here the report and city
}

private Observable<String> getReport(String city) {
    return Observable.just("report");
}

您可以在此处查看更多示例https://github.com/politrons/reactive