在房间中,为什么我可以@insert表中的一行,但无法使用 SQL 请求检索它?



我对房间有问题(我的拳头时间与房间(。

我可以在我的数据库中插入一些数据,但不能检索某些内容。我被这个问题困住了。如果你能解释我。

我解释: 我使用Android架构组件。所以我有一个DAO来发出我的SQL请求。我有一个存储库不直接处理我的数据库。

最后,我有一个视图模型,不用担心数据持久性。 我的DAO使用注释@Insert来创建一行。 我使用 Stetho 查看我的数据库,一切都很好。

我的行已创建。 所以,当我想用另一个SQL请求获取它时(以同样的方式DAO =>存储库=>ViewModel(, 我的请求始终返回 null。

// --- DAO --- 
@Query("SELECT * FROM users WHERE id = :id")
LiveData<RealEstate> getRealEstate(long id);

// --- REPOSITORY --- 
private final RealEstateDao realEstateDao;
public RealEstateRepository(RealEstateDao realEstateDao) { this.realEstateDao = realEstateDao; }
public LiveData<RealEstate> getRealEstate(long id) { return this.realEstateDao.getRealEstate(id); }
// --- VIEWMODEL --- 
public LiveData<RealEstate> getUser(long userId) {
return userDataSource.getRealEstate(userId);
}

我认为您使用了不正确的LiveData,房间有用于RXJava/Kotlin,协程等的桥接适配器。

首先,将返回值更改为类似这样的值

@Query("SELECT * FROM users WHERE id = :id")
RealEstate getRealEstate(long id);

请记住,您不能在主线程中进行数据库操作,您应该对该 RX、协程、线程等使用一种机制。

在此之后,您可以在视图模型中使用 LiveData 包装从数据库中检索的数据,以通知其 UI 父级。

最新更新