Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava从Openweathermap获取多个城市天气_Java_Android_Rx Java_Rx Android - Fatal编程技术网

RxJava从Openweathermap获取多个城市天气

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

首先,我对rxjava是新手。我制作了一个简单的天气应用程序,它从OpenWeatherMapAPI返回城市的天气数据。我结合了rxjava和Rx2。但我想让多个城市井然有序。实际上,我可以通过创建分离的可观察对象来实现这一点,例如:

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运算符。