java - RxJava - 合并两个 Observable

标签 java android retrofit rx-java rx-android

我需要将来自另一个 Retrofit 请求的图像合并到它的特定系列中。 听起来很容易的任务却让我陷入 react hell ,没有希望的迹象。

具体来说,我还通过 Observable 创建服务,因为我需要获得身份验证 token 才能创建服务。

我的尝试基于这个答案: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;
}

我有点不知所措。我只是在 IDE 的 Observable.zip 的 Func2 部分得到“无法推断功能接口(interface)类型”,构建日志说:

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>)

最佳答案

好的,首先要做的是;不要将服务创建为 Observable,这会使您的代码更难。有很多解决方法。

其次,您不需要使用 zip:

application
  .getTVService()
  .flatMap(service ->
     service
     .searchSeries(searchFor)
     .flatMapIterable(series -> series)
     .flatMap(aSeries -> 
        service
        .queryImages(aSeries.getId(), "poster")
        .map(i ->  combineSeriesData(aSeries, i))
     )
  );

关于java - RxJava - 合并两个 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39334717/

相关文章:

java - 无法在 Apache 7.0 上连接超音速(HSQLDB)数据库

java - ListIndexOutOfBoundsException 永远不会在相应的 try 语句主体中抛出

java - JDialog WindowOpened 事件仅触发一次

保存到快照并重新启动后,Android 虚拟设备状态处于脱机状态

android - 如何在同一级别解析具有重复元素的此 xml 文件

java - 如何访问 JSONArray 中的每个键和值

java - Android Intent Bundle 传递始终返回 null

java - 组位置始终返回 0

android - RxJava 的 .debounce() 干扰了我的 Observable 的线程和错误处理

java - 在 url 处使用特殊字符进行改造