【问题标题】:Send multiple requests using RxJava使用 RxJava 发送多个请求
【发布时间】:2018-02-06 22:36:36
【问题描述】:

我对在 Android 中使用 RxJava 和 Retrofit 非常陌生。我已经成功编写了 API 调用并开发了接口。现在,我想以一种可以发送两个请求的方式编写代码:第二个请求取决于第一个请求的值。如果可能的话,有人可以指导我吗?如果是,那怎么办?任何代码 sn-p 都会很有帮助。

例如:以下是两个请求:

mCompositeDisposable.add(fcService.getStationList()
                .subscribeOn(Schedulers.io()) // "work" on io thread
                .observeOn(AndroidSchedulers.mainThread()) // "listen" on UIThread
                .subscribe(this::handleResults, this::handleError)
        );


mCompositeDisposable.add(fcService.getStationSensor("12345678")
                    .subscribeOn(Schedulers.io()) // "work" on io thread
                    .observeOn(AndroidSchedulers.mainThread()) // "listen" on UIThread
                    .subscribe(this::handleResults, this::handleError)
            );

第二个请求可以使用第一个请求响应的值。是否可以以我只为它们编写一次代码的方式合并这两个请求?

【问题讨论】:

  • 我们需要查看handleResults 等的代码,我们还需要知道您到底想做什么。您是否只想将getStationSensor() 用于getStationList() 中的第一项?你想getStationSensor() 每件商品吗?仅适用于符合某些标准的某些项目?等
  • @BenP。有两种情况:(1)是的,你没看错。我想为 getStationList() 中的第一项获取 getStationSensor()。 (2) 当用户从站的列表中更改站时,我想在站的更改上获取 getStationSensor()。任何可以同时处理的解决方案?或者至少是第一个? handleResults 只是解析 List 以提取它们的名称并填充 Dropdown。

标签: android rx-java2 rx-android


【解决方案1】:

使用 flatMap 运算符,您可以检查第一次调用的响应并选择要执行的下一个操作,这样您就可以构建一个可以订阅的新 Observable(下一个“代码”是 kotlin 样式):

Single<StationSensor> newSingle = 
fcService.getStationList().flatMap{ stationList ->
    when(stationList){
        "OK_value" -> fcService.getStationSensor(stationList)
        else -> Single.error(RuntimeException("Error response"))
    }
}

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2018-05-31
    • 2021-06-04
    • 1970-01-01
    • 2017-06-09
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多