Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在房间里,为什么我可以在表中@insert一行,但无法使用SQL请求检索它?_Android_Sql_Database_Android Room - Fatal编程技术网

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

Android 在房间里,为什么我可以在表中@insert一行,但无法使用SQL请求检索它?,android,sql,database,android-room,Android,Sql,Database,Android Room,我第一次在房间里遇到问题 我可以在数据库中插入一些数据,但不能检索某些数据。我被这个问题困住了。如果你能解释的话 我解释: 我使用Android架构组件。因此,我有一个DAO来发出SQL请求。我有一个不直接处理数据库的存储库 最后,我有一个viewModel,不用担心数据的持久性。 我的DAO使用注释@Insert创建一行。 我用听诊器检查数据库,一切正常 我的行已创建。 所以,当我想通过DAO=>repository=>ViewModel同样的方式通过另一个SQL请求获取它时, 我的请求总是返

我第一次在房间里遇到问题

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

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

最后,我有一个viewModel,不用担心数据的持久性。 我的DAO使用注释@Insert创建一行。 我用听诊器检查数据库,一切正常

我的行已创建。 所以,当我想通过DAO=>repository=>ViewModel同样的方式通过另一个SQL请求获取它时, 我的请求总是返回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、协程、线程等使用一种机制


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

好的,感谢您的评论,我找到了解决方案。你是对的。我不正确地使用了LiveData。我们确实可以直接在DAO中使用LiveData