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

时间:2016-04-05 09:56:59

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

1 个答案:

答案 0 :(得分:1)

您可以使用flatMap

的其中一种变体
...
            .concatMap(Observable::from)
            .flatMap(item -> someOtherService.getDetails(item.somedetail), (item, detail) -> new ExtendedItem(item, detail))
            .toList()
...