【问题标题】:RxJava getting multiple city weathers from OpenweathermapRxJava 从 Openweathermap 获取多个城市天气
【发布时间】:2018-08-08 21:03:36
【问题描述】:

首先,我是 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,但哪一个是正确的?我对它们感到困惑。

你能帮帮我吗?

【问题讨论】:

  • 使用 zip 运算符。

标签: java android rx-java rx-android


【解决方案1】:

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

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

【讨论】:

  • 我不能像这样改变我的观察者..你能写清楚吗
  • 请扩展您的答案并添加一些评论或文档,以便每个人都了解您的答案。
猜你喜欢
  • 2021-06-17
  • 2016-12-16
  • 1970-01-01
  • 2013-11-24
  • 2017-03-25
  • 2020-02-03
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多