当前位置: 首页 > 知识库问答 >
问题:

RxJava-组合两个观察值

麻昌翰
2023-03-14

我需要将另一个改装请求中的图像合并到其特定系列中。听起来很简单的任务把我带进了反应式的地狱,没有一丝希望。

具体来说,我还通过可观察创建服务,因为我需要获取身份验证令牌来创建服务。

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

我有点不知所措。我只是在Observable的Func2部分得到了“无法推断函数接口类型”。在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>)

共有1个答案

罗昕
2023-03-14

好吧,首先要做的事;不要将服务创建为可观察的,这会使您的代码更加困难。这是有办法的。

其次,您不需要使用zip:

application
  .getTVService()
  .flatMap(service ->
     service
     .searchSeries(searchFor)
     .flatMapIterable(series -> series)
     .flatMap(aSeries -> 
        service
        .queryImages(aSeries.getId(), "poster")
        .map(i ->  combineSeriesData(aSeries, i))
     )
  );
 类似资料:
  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 我有两个可观察到的。它们都是可观察的类型 一种是冷的,称为初始值可观察(initialValueObservable),它通过可观察(Observable)从项目列表中发出。from()。 另一个是名为“valueUpdateObservable”的热门主题,它是一个发布主题,在出现新项目时通知订阅者。 在客户端中,我想同时订阅这两个,因此我从和发布的更新中获取初始值。我最初的方法是合并它们,但我

  • 在android 6.0.1 Samsung s6 Edge+上的测试 当device screen脱机并从debug中拔出时,可观察到的只是停止发射项目。如果设备打开,则开始发射对象。另一个问题是,在停止接收项目之前,我会按照相同项目的顺序随机地得到2/3个重复调用 ____________________________edit_________________________________

  • 我有一个中心班,叫它。它可以添加1-N个观测值。我需要动态添加这些,然后知道最终的onComplete()何时执行。 怎么做? 代码示例: 使现代化 我已经研究这个有一段时间了。使用@DaveMoten的答案,我已经接近了。 下面是我的方法,可以随意添加一个新的observable,并在所有observable都完成时收到通知(伪代码): 日志记录看起来是这样的: 更新:我添加了一些计数器,这表明

  • 使用:我必须更新存储在本地数据库中的当前订单。步骤如下: 从后端下载数据(~800项) 检查本地数据库是否已包含项。后端人员使用字符串作为主键。 如果该项不在数据库中,请添加它。 如果该项在数据库中,请更新它。 问题 你有一个如何用反应的方式解决这个问题的想法吗?有没有一个运算符,允许把可观察到的东西分成两个列表。或者我应该使用一个全局变量(似乎不是一个好主意)来保存信息,哪些数据要插入,哪些要更

  • 我有多个热观测器,它们可能发射也可能不发射项目。因此,我想把可观察项组合起来,然后如果其中任何一个发出结果,就处理结果,但如果其他可观察项在item发出,就应该一起处理。 还有可能在之前发出 最接近我所需要的,但只有当所有可观察到的对象发出至少一个项时才会发出结果。这个有无反应操作符吗?