RxJava从Openweathermap获取多个城市天气
首先,我对rxjava是新手。我制作了一个简单的天气应用程序,它从OpenWeatherMapAPI返回城市的天气数据。我结合了rxjava和Rx2。但我想让多个城市井然有序。实际上,我可以通过创建分离的可观察对象来实现这一点,例如:RxJava从Openweathermap获取多个城市天气,java,android,rx-java,rx-android,Java,Android,Rx Java,Rx Android,首先,我对rxjava是新手。我制作了一个简单的天气应用程序,它从OpenWeatherMapAPI返回城市的天气数据。我结合了rxjava和Rx2。但我想让多个城市井然有序。实际上,我可以通过创建分离的可观察对象来实现这一点,例如: Observable<WeatherUpdated> observableAnkara = service.getWeatherData("Ankara",API_KEY); observableAnkara.subscribeOn(Scheduler
Observable<WeatherUpdated> observableAnkara = service.getWeatherData("Ankara",API_KEY);
observableAnkara.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<WeatherUpdated>() {
@Override
public void onSubscribe(Disposable d)
{
}
@Override
public void onNext(WeatherUpdated weatherUpdated)
{
tv.setText(weatherUpdated.getWeather().get(0).getDescription());
}
@Override
public void onError(Throwable e)
{
e.printStackTrace();
}
@Override
public void onComplete()
{
}
});
Observable<WeatherUpdated> observableIstanbul = service.getWeatherData("Istanbul",API_KEY);
observableIstanbul
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<WeatherUpdated>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(WeatherUpdated weatherUpdated)
{
tv_Istanbul.setText(weatherUpdated.getWeather().get(0).getDescription());
tv_Istanbul.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
observableeankara=service.getWeatherData(“安卡拉”,API_键);
observableAnkara.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
认购的公共无效(一次性d)
{
}
@凌驾
public void onNext(天气更新天气更新)
{
tv.setText(weatherUpdated.getWeather().get(0.getDescription());
}
@凌驾
公共无效申报人(可丢弃的e)
{
e、 printStackTrace();
}
@凌驾
未完成的公共空间()
{
}
});
Observable Observateistanbul=service.getWeatherData(“伊斯坦布尔”,API_键);
可观测的斯坦布尔
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
认购的公共无效(一次性d){
}
@凌驾
public void onNext(天气更新天气更新)
{
tv_伊斯坦布尔.setText(weatherUpdated.getWeather().get(0.getDescription());
tv_伊斯坦布尔.setTextAlignment(View.TEXT_ALIGNMENT_中心);
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
在安卡拉之后,我想在文本中展示伊斯坦布尔的天气状况。我该怎么做?我搜索了一下,有很多解决方案,比如concat、startWith、zip,但哪一个是正确的?我对他们感到困惑
你能帮我吗?你可以有一张城市控制地图:
Map<String, Control> cityControls= getCityControls();
Map cityControls=getCityControls();
然后
Observable
.fromArray(cities.keySet().toArray())
.flatMap(city -> service.getWeatherData(city, API_KEY).map(data -> new Pair<String, String>(city, data.getWeather().get(0).getDescription())))
.observeOn(...)
.subscribe(data -> citiesControls[data.getKey()].setText(data.getValue()))
可观察
.fromArray(cities.keySet().toArray())
.flatMap(城市->服务.getWeatherData(城市,API_键).map(数据->新对(城市,数据.getWeather().get(0).getDescription()))
.观察(…)
.subscribe(数据->CitiesControl[data.getKey()].setText(data.getValue())
我无法像这样更改我的可观察项。。请你写清楚一点好吗?请扩展你的答案并添加一些注释或文档,这样每个人都能理解你的答案。使用zip运算符。