从Observable获取对象值RxJava,翻新版

问题描述

我正在尝试学习使用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的返回对象。您可能想flatMap

Observable
   .just(it.url)
   .flatMap { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }

这不仅会映射结果,而且还会将结果展平,这样您就不会得到可观察到的结果,而是该可观察到的结果。