我正在尝试使用Rxjava进行Api调用并进行改装。我必须在一个循环中进行多个api调用。我很难在我的订阅者中获得价值。
@GET("pokemon" + "/{id}")
fun getPokemonData(@Path("id") id: Int):
Observable<Pokemon>
我希望在我的订阅服务器中得到一个口袋妖怪对象,但我得到了一个Observable。如何将其转换为口袋妖怪对象?
Observable.fromIterable(list)
.flatMap { it ->
Observable
.just(it.url)
.map { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it))
}
}
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
//onNext --I'm expecting to get a Pokemon Object here, instead I get a Observable<Pokemon>
}, {//onError} , {// do something when all api calls are done?})
我的目标是在";列表";并得到";被通知";当所有api调用完成时。这是解决这个问题的正确方法吗?
问题就在这里:
Observable
.just(it.url)
.map { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }
使用map
时,它会映射到getPokemonData
的返回对象。你可能想flatMap
它:
Observable
.just(it.url)
.flatMap { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }
它不仅映射了结果,而且也使其变平,这样你就不会得到可观察的结果,而是可观察的的结果。