首页 > 解决方案 > RxJava 从 Openweathermap 获取多个城市天气

问题描述

首先,我是rxjava的新手。我制作了一个简单的天气应用程序,它从openweathermap API返回城市的天气数据。我结合了retrofit2和rxjava。但我想按顺序排列多个城市。实际上,我可以通过创建单独的 observable 来做到这一点,例如:

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() {

                }
            });

在安卡拉之后,我想在文本中显示伊斯坦布尔的天气状况。我怎样才能做到这一点?我搜索了它,有很多解决方案,如 concat、startWith、zip,但哪一个是正确的?我对他们感到困惑。

请你帮助我好吗?

标签: javaandroidrx-javarx-android

解决方案


你可以有一个城市控制地图:

    Map<String, Control> 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()))

推荐阅读