2016-04-05 11 views
1

Ben Retrofit 2 kullanıyorum ve RxJava'yı öğreniyorum. Bir yerlerden öğelerin listesini indiriyorum. Her öğe için bir api araması yapmak ve genişletilmiş öğelerin yeni bir listesini oluşturmak istiyorum. Her iki çağrı da Gözlemlenebilir.RxJava api genişletilmiş ürün listesindeki her öğe için bir çağrı ve

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

}

sorun getDetails bir gözlemlenebilir döner ve ben ExtendedItem oluşturmak için kullanamazsınız şudur:

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

detayları hizmeti: Bu şuna benzer. Bir nesneyi döndürmek için getDetails çağrısının değiştirilmesi rxJava zincirinde çalışmaz, çünkü sonucu ana iş parçacığına döndürür. Nesneyi nasıl kendim alabilirim? Çok fazla şey denedim ama hiçbir şey şu ana kadar işe yaramıyor.

cevap

1

Sen flatMap varyantları birini kullanabilirsiniz:

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