从 Observable 获取对象值(RxJava、Retrofit)
Get object value from Observable (RxJava, Retrofit)
我正在尝试学习使用 Rxjava 进行 Api 调用和改造。我必须在循环中进行多次 api 调用。我正在为获取订阅者的价值而苦苦挣扎。
@GET("pokemon" + "/{id}")
fun getPokemonData(@Path("id") id: Int):
Observable<Pokemon>
我希望在我的订阅者中得到一个 Pokemon 对象,但我却得到了一个 Observable。如何将其转换为 Pokemon 对象?
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?})
我的目标是使用“列表”中的 ID 进行 api 调用,并在所有 api 调用完成时收到“通知”。这是解决这个问题的正确方法吗?
问题出在这里:
Observable
.just(it.url)
.map { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }
当您使用 map
时,它映射到 getPokemonData
中的 return 对象。你可能想要 flatMap
它:
Observable
.just(it.url)
.flatMap { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }
它不仅映射了结果,还将其展平,这样您就不会得到一个可观察的对象,而是那个可观察对象的结果。
我正在尝试学习使用 Rxjava 进行 Api 调用和改造。我必须在循环中进行多次 api 调用。我正在为获取订阅者的价值而苦苦挣扎。
@GET("pokemon" + "/{id}")
fun getPokemonData(@Path("id") id: Int):
Observable<Pokemon>
我希望在我的订阅者中得到一个 Pokemon 对象,但我却得到了一个 Observable。如何将其转换为 Pokemon 对象?
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?})
我的目标是使用“列表”中的 ID 进行 api 调用,并在所有 api 调用完成时收到“通知”。这是解决这个问题的正确方法吗?
问题出在这里:
Observable
.just(it.url)
.map { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }
当您使用 map
时,它映射到 getPokemonData
中的 return 对象。你可能想要 flatMap
它:
Observable
.just(it.url)
.flatMap { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }
它不仅映射了结果,还将其展平,这样您就不会得到一个可观察的对象,而是那个可观察对象的结果。