我正在尝试学习如何使用Rxjava通过改进来进行Api调用。我必须在一个循环中进行多个api调用。我正在努力获得我的订阅者的价值。
@GET("pokemon" + "/{id}")
fun getPokemonData(@Path("id") id: Int):
Observable<Pokemon>我希望在我的订阅者中获得一个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?})我的目标是使用“列表”中的is进行api调用,并在所有api调用完成时得到“通知”。这是解决这个问题的正确方法吗?
发布于 2020-10-05 22:47:33
问题在于:
Observable
.just(it.url)
.map { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }当您使用map时,它映射到从getPokemonData返回的对象。您可能希望对其执行flatMap操作:
Observable
.just(it.url)
.flatMap { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }这不仅映射了结果,还将其展平,这样你就不会得到一个可观测的结果,而是那个可观测的结果。
https://stackoverflow.com/questions/64199803
复制相似问题