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()方法进行调用,但是不清楚具体该如何使用