Android api一个接一个地调用第一个api响应的基础

Android api一个接一个地调用第一个api响应的基础,android,kotlin,rx-java2,Android,Kotlin,Rx Java2,我的情况如下。 我必须调用一个api,它将为我提供餐厅ID列表 调用每家餐厅的Api并逐个获取信息 请帮助我使用RXJava解决方案,或者如果您有很好的解决方案,请告诉我 调用API以获取可观察的 创建可观察对象列表以获取以下信息: val restaurantsObservables:列表 =ids.map{getRestaurantById(it)} Observable.concat(Observable.from(restaurantsObservables)).toList() 可观

我的情况如下。

  • 我必须调用一个api,它将为我提供餐厅ID列表
  • 调用每家餐厅的Api并逐个获取信息
  • 请帮助我使用RXJava解决方案,或者如果您有很好的解决方案,请告诉我

  • 调用API以获取可观察的
  • 创建可观察对象列表以获取以下信息:
  • val restaurantsObservables:列表
    =ids.map{getRestaurantById(it)}
    Observable.concat(Observable.from(restaurantsObservables)).toList()
    
    可观察。从(restaurantsObservables)
    -它将源序列转换为可观察序列,并从序列中发射每个项目

    Observable.concat(…)
    -它将发出按顺序执行的请求


    .toList()
    部分将在一个可观察的
    中收集所有响应

    这是

    您只需要调用餐厅的api并将响应平面映射。假设你有这个班

    data class Restaurant(val id)
    
    例如,如果api返回一个
    单个
    ,那么您可以轻松地将其平面映射:

      getListOfRestaurants()
        .flatMapObservable { Observable.fromIterable(it) }
        .flatMap { getRestaurantDetails(it.id) }
        .toList()
    
    执行
    fromIterable
    有助于一次发射每个餐厅,然后使用
    flatMap
    您可以轻松获得详细信息


    toList()
    是可选的,只有当你想把餐馆的详细信息作为一个列表时才可以使用。

    对于getRestaurantDetails(it.id),我只使用了Single,但它会给我带来问题类型不匹配,当我把它设置为getRestaurantDetails(it.id)。toObservable()时,它工作正常,但我可以一次性处理它,我不确定我是否理解。是否使用
    flatMapObservable
    ?我明白了,
    getRestaurantDetails()
    的返回是一个单一的?在这种情况下,
    Tooberable()
    是一个很好的解决方案,但我不明白你是如何得到一次性的而不是可观察的
      getListOfRestaurants()
        .flatMapObservable { Observable.fromIterable(it) }
        .flatMap { getRestaurantDetails(it.id) }
        .toList()