我对房间有问题(我的拳头时间与房间(。
我可以在我的数据库中插入一些数据,但不能检索某些内容。我被这个问题困住了。如果你能解释我。
我解释: 我使用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 父级。