【问题标题】:RxJava api call for every item in list and return list of extended itemsRxJava api 调用列表中的每个项目并返回扩展项目的列表
【发布时间】:2016-07-25 04:44:00
【问题描述】:

我使用 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 链中不起作用,我猜是因为它将结果返回给主线程。如何获取对象本身?我尝试了很多其他的东西,但到目前为止没有任何效果。

【问题讨论】:

    标签: android retrofit rx-java


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2015-06-26
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多