2016-04-05 15 views
1

私はRetrofit 2を使用していますが、私はRxJavaを学習しています。私はどこかからアイテムのリストをダウンロードする。私は各アイテムのAPI呼び出しを呼び出して、拡張アイテムの新しいリストを作成したいと思います。どちらの呼び出しもObservableを返します。RxJava APIリスト内のすべてのアイテムを呼び出し、拡張アイテムのリストを返します

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が観測を返し、私はExtendedItemを構築するためにそれを使用することはできませんということです。これは次のようになります。オブジェクトを返すgetDetails呼び出しを変更すると、rxJavaチェーンでは機能しません。結果はメインスレッドに返されるためです。どのようにオブジェクト自体を取得するのですか?私は他の多くのことを試みましたが、これまでのところ何もできません。

答えて

1

あなたはflatMapの変異体のいずれかを使用できます。

... 
      .concatMap(Observable::from) 
      .flatMap(item -> someOtherService.getDetails(item.somedetail), (item, detail) -> new ExtendedItem(item, detail)) 
      .toList() 
... 
関連する問題