android - RxJava api 调用列表中的每个项目并返回扩展项目列表

标签 android retrofit rx-java

我使用 Retrofit 2 并且正在学习 RxJava。我从某处下载了项目列表。我想为每个项目调用 api 并创建一个新的扩展项目列表。两个调用都返回一个 Observable。它看起来像这样:

getItemsService.getItems()
            .concatMap(Observable::from)
            .map(item -> new ExtendedItem(item, someOtherService.getDetails(item.somedetail)))
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(activity);

详情服务:

public interface IGetDetailsService {
@GET(BuildConfig.GET_DETAILS_ENDPOINT)
Observable<Detail> getDetails(@Query("q") String someDetail);

问题是 getDetails 返回一个 Observable,我不能用它来构造 ExtendedItem。更改 getDetails 调用以返回对象在 rxJava 链中不起作用,我猜是因为它将结果返回到主线程。我如何获得对象本身?我尝试了很多其他的东西,但到目前为止没有任何效果。

最佳答案

您可以使用 flatMap 的一种变体:

...
            .concatMap(Observable::from)
            .flatMap(item -> someOtherService.getDetails(item.somedetail), (item, detail) -> new ExtendedItem(item, detail))
            .toList()
...

关于android - RxJava api 调用列表中的每个项目并返回扩展项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36423026/

相关文章:

android - 从构建中删除 AOSP 应用程序

android - CopyToRealm - 值已存在 : null

android - 改造显示请求详细信息 - 正文、标题等

java - 在 RxJava 中处理背压而不丢弃项目或序列化

java - RxJava解释这个循环

java - 在主 Activity 中实例化的 TextView 上设置文本

android - Android 选项菜单项中没有显示图标

android - 在没有确认消息的情况下激活 android 蓝牙可见性

android - 协程 : run a Deferred on a specific CoroutineContext

java - 我如何测试这个 rxJava 代码?