从数据库获取数据时,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是可观察的,所以如果数据库发生变化,它们会一直监听,所以它永远不会完成。

08-26 06:05