Android 在房间里,为什么我可以在表中@insert一行,但无法使用SQL请求检索它?
我第一次在房间里遇到问题 我可以在数据库中插入一些数据,但不能检索某些数据。我被这个问题困住了。如果你能解释的话 我解释: 我使用Android架构组件。因此,我有一个DAO来发出SQL请求。我有一个不直接处理数据库的存储库 最后,我有一个viewModel,不用担心数据的持久性。 我的DAO使用注释@Insert创建一行。 我用听诊器检查数据库,一切正常 我的行已创建。 所以,当我想通过DAO=>repository=>ViewModel同样的方式通过另一个SQL请求获取它时, 我的请求总是返回nullAndroid 在房间里,为什么我可以在表中@insert一行,但无法使用SQL请求检索它?,android,sql,database,android-room,Android,Sql,Database,Android Room,我第一次在房间里遇到问题 我可以在数据库中插入一些数据,但不能检索某些数据。我被这个问题困住了。如果你能解释的话 我解释: 我使用Android架构组件。因此,我有一个DAO来发出SQL请求。我有一个不直接处理数据库的存储库 最后,我有一个viewModel,不用担心数据的持久性。 我的DAO使用注释@Insert创建一行。 我用听诊器检查数据库,一切正常 我的行已创建。 所以,当我想通过DAO=>repository=>ViewModel同样的方式通过另一个SQL请求获取它时, 我的请求总是返
// --- 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、协程、线程等使用一种机制
在此之后,您可以在viewmodel中使用LiveData包装从数据库检索到的数据,以通知其UI父级。好的,感谢您的评论,我找到了解决方案。你是对的。我不正确地使用了LiveData。我们确实可以直接在DAO中使用LiveData