从 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)) }

它不仅映射了结果,还将其展平,这样您就不会得到一个可观察的对象,而是那个可观察对象的结果。