五月的爸爸 2019-12-25 10:42 采纳率: 100%
浏览 429

RxJava toList或者collect运算符后无法进行订阅

final Observer<List<SportCheckTaskEntity>> observer =  new Observer<List<SportCheckTaskEntity>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(List<SportCheckTaskEntity> sportCheckTaskEntities) {
                    iSportCheckTaskPresenterView.onRefreshDataSuccess(flag, sportCheckTaskEntities);
                }

                @Override
                public void onError(Throwable e) {
                    Log.i("1216", e.toString());
                }

                @Override
                public void onComplete() {

                }
            };
            sportCheckDao.querySportCheckTaskManager(userId, teamId, currentTime)
                    // 当前的类型和期望的类型
                    .flatMap(new Function<List<SportCheckTaskEntity>, ObservableSource<SportCheckTaskEntity>>() {
                        @Override
                        public ObservableSource<SportCheckTaskEntity> apply(List<SportCheckTaskEntity> sportCheckTaskEntities) throws Exception {
                            return Observable.fromIterable(sportCheckTaskEntities);
                        }
                    })
                    .flatMap(new Function<SportCheckTaskEntity, ObservableSource<SportCheckTaskEntity>>() {
                        @Override
                        public ObservableSource<SportCheckTaskEntity> apply(final SportCheckTaskEntity sportCheckTaskEntity) throws Exception {
                            return sportCheckDao.getSportCheckTaskPrepareItemCountByTaskId(sportCheckTaskEntity.getSportCheckTaskId()).map(new Function<Integer, SportCheckTaskEntity>() {
                                @Override
                                public SportCheckTaskEntity apply(Integer integer) throws Exception {
                                    sportCheckTaskEntity.setPrepareItemNumber(integer);
                                    return sportCheckTaskEntity;
                                }
                            });
                        }
                    })
                    .flatMap(new Function<SportCheckTaskEntity, ObservableSource<SportCheckTaskEntity>>() {
                        @Override
                        public ObservableSource<SportCheckTaskEntity> apply(final SportCheckTaskEntity sportCheckTaskEntity) throws Exception {
                            return sportCheckDao.getSportCheckTaskTotalItemCountByTaskId(sportCheckTaskEntity.getSportCheckTaskId()).map(new Function<Integer, SportCheckTaskEntity>() {
                                @Override
                                public SportCheckTaskEntity apply(Integer integer) throws Exception {
                                    sportCheckTaskEntity.setTotalItemNumber(integer);
                                    return sportCheckTaskEntity;
                                }
                            });
                        }
                    })
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .toList()
                    .toObservable()
                    .subscribe(observer);

第一个flatMap是用来发射单个Observable的
第二个flatMap是用来给集合中的对象添加某个值的
第二个flatMap是用来给集合中的对象添加某个值的

在这之前,都没有问题,但是在执行toList()或者collect()运算符后,后续的订阅没有执行.

网上查了原因,说是toList()运算符引起的阻塞,需要使用onComplete()方法进行调用,但是不清楚具体该如何使用

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 sub地址DHCP问题
    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程
    • ¥15 redis-full-check比较 两个集群的数据出错
    • ¥15 Matlab编程问题
    • ¥15 训练的多模态特征融合模型准确度很低怎么办
    • ¥15 kylin启动报错log4j类冲突
    • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大