2016-09-05 11 views
1

Мне нужно объединить изображения с другого разрешения на повторную установку в соответствии с конкретными сериями. То, что звучит как легкая задача, привело меня глубоко в реактивный ад без признаков надежды.RxJava - Объединить две наблюдаемые

В частности, я также создаю службу через Observable, так как мне нужно получить токен аутентификации для создания службы.

Я основывал свои попытки на этом ответе: https://stackoverflow.com/a/28418503/2192545.

public void loadSeries(String searchFor) { 

    mainView.showLoadingIndicator(); 
    if (subscription != null) subscription.unsubscribe(); 


    TVApplication application = TVApplication .get(mainView.getContext()); 

    application.getTVService() 
      .flatMap(service -> service.searchSeries(searchFor) 
        .flatMap(series -> Arrays.asList(series).stream() 
          .<List<Series>>flatMap(aSeries -> { 
           Observable<Series> obsSeries = Observable.just(aSeries); 
           Observable<ImageListWrapper> obsImages = service.queryImages(aSeries.getId(), "poster"); 
           return Observable.zip(obsSeries, obsImages, (Series s, ImageListWrapper i) -> combineSeriesData(s, i)); 
          }))); 
} 

private Series combineSeriesData(Series s, ImageListWrapper i) { 
    s.setPosters(i.getImages()); 
    return s; 
} 

Я в пути над головой. Я просто получить «Не удается вывести функциональный тип интерфейса» на func2 части Observable.zip в IDE, журнал сборки говорит:

Error:(63, 58) error: incompatible types: bad return type in lambda 

expression 
no instance(s) of type variable(s) T1,T2,R exist so that Observable<R> conforms to Stream<? extends List<Series>> 
where T1,T2,R are type-variables: 
T1 extends Object declared in method <T1,T2,R>zip(Observable<? extends T1>,Observable<? extends T2>,Func2<? super T1,? super T2,? extends R>) 
T2 extends Object declared in method <T1,T2,R>zip(Observable<? extends T1>,Observable<? extends T2>,Func2<? super T1,? super T2,? extends R>) 
R extends Object declared in method <T1,T2,R>zip(Observable<? extends T1>,Observable<? extends T2>,Func2<? super T1,? super T2,? extends R>) 

ответ

2

Ok, первые вещи сначала; не создавайте Службу как наблюдаемую, это сделает ваш код более сложным. Есть способы обойти это.

Во-вторых, вам не нужно использовать почтовый индекс:

application 
    .getTVService() 
    .flatMap(service -> 
    service 
    .searchSeries(searchFor) 
    .flatMapIterable(series -> series) 
    .flatMap(aSeries -> 
     service 
     .queryImages(aSeries.getId(), "poster") 
     .map(i -> combineSeriesData(aSeries, i)) 
    ) 
); 
Смежные вопросы