首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Observable获取对象值(RxJava,Retrofit)

从Observable获取对象值(RxJava,Retrofit)
EN

Stack Overflow用户
提问于 2020-10-05 04:54:25
回答 1查看 225关注 0票数 0

我正在尝试学习如何使用Rxjava通过改进来进行Api调用。我必须在一个循环中进行多个api调用。我正在努力获得我的订阅者的价值。

代码语言:javascript
运行
复制
@GET("pokemon" + "/{id}")
fun getPokemonData(@Path("id") id: Int):
        Observable<Pokemon>

我希望在我的订阅者中获得一个Pokemon对象,但我得到的却是一个Observable。如何将其转换为精灵宝可梦对象?

代码语言:javascript
运行
复制
  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调用完成时得到“通知”。这是解决这个问题的正确方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-05 22:47:33

问题在于:

代码语言:javascript
运行
复制
Observable
   .just(it.url)
   .map { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }

当您使用map时,它映射到从getPokemonData返回的对象。您可能希望对其执行flatMap操作:

代码语言:javascript
运行
复制
Observable
   .just(it.url)
   .flatMap { PokeApi.retrofitService.getPokemonData(getPokemonIdFromUrl(it)) }

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64199803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档