我有一份城市名单,我想找到每个城市的天气。 例如我的列表是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
答案 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