五月的爸爸 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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 永磁型步进电机PID算法
    • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥200 uniapp长期运行卡死问题解决
    • ¥15 latex怎么处理论文引理引用参考文献
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
    • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?