从数据库获取数据时,room dao有一个返回flowable userdao.getinfo()的方法,这个flowable永远不会完成,我测试了adding doonnext()它发出了5次(db包含5个项),但complete从未被调用,但我需要的是,因为我有tolist(),有什么可以替代的
return userDatas()
.flatMapIterable(items -> items)
.flatMap(userData -> userDao.getInfo(userData.getId())
.map(user -> user.toStoreModel(...)//added doOnNext()-works 5 times and doOnComplete()doesn't work
.doOnNext(userData -> Log.i("test",""+userData))
.doOnComplete(() -> Log.i("test","complete"))
.toList()
.map(UserModel::fromUserModels)
.toFlowable();
@Query("SELECT * FROM user WHERE id = :id")
Flowable<...> getInfo(Long Id);
public Flowable<List<UserStore>> userDatas() {
return userDao.allUserDatas()
.take(1)//added complete and next works
.filter(userDatas -> !userDatas.isEmpty())
.switchIfEmpty(userIds()
.doOnNext(userDatas -> userDao.insert(userDatas)));
}
我已经测试过了,甚至当我用userdao.alluserdatas()替换userdatas()时(我确信它存在于数据库中),它也给出了相同的结果
最佳答案
你的代码一切正常,永远不会完成
db flowables是可观察的,所以如果数据库发生变化,它们会一直监听,所以它永远不会完成。