Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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-如何使用Room从db获取简单列表?_Android_Android Room_Android Livedata - Fatal编程技术网

android-如何使用Room从db获取简单列表?

android-如何使用Room从db获取简单列表?,android,android-room,android-livedata,Android,Android Room,Android Livedata,我正在android应用程序中使用组件库。在某些情况下,需要使用Livedata并观察它的数据,但有时我只想得到一些普通的列表,而不是Livedata,我如何才能做到这一点?用简单的方法查询数据库 p、 s:我使用getValue(),但它返回null在DAO中使用类似这样的查询: @Query("SELECT * FROM TABLE_NAME") fun getListOfData(): List<Data>? 或在构建房间数据库时,您可以允许数据库在主线程上执行,如下所示(尽

我正在android应用程序中使用组件库。在某些情况下,需要使用Livedata并观察它的数据,但有时我只想得到一些普通的列表,而不是Livedata,我如何才能做到这一点?用简单的方法查询数据库


p、 s:我使用getValue(),但它返回null

DAO中使用类似这样的查询:

@Query("SELECT * FROM TABLE_NAME")
fun getListOfData(): List<Data>?
在构建房间数据库时,您可以允许数据库在主线程上执行,如下所示(尽管我不建议这样做):


DAO中使用如下查询:

@Query("SELECT * FROM TABLE_NAME")
fun getListOfData(): List<Data>?
在构建房间数据库时,您可以允许数据库在主线程上执行,如下所示(尽管我不建议这样做):


您只需在Dao中编写返回类型为List的查询,并从需要这些数据的ViewModel调用即可

例如:

//油刀

 @Query("SELECT * FROM YourTable")
List<YourModel> getAllYourTableData();

假设您了解android arch组件中的repo模式。

您只需在Dao中编写返回类型为List的查询,然后从需要这些数据的ViewModel调用即可

例如:

//油刀

 @Query("SELECT * FROM YourTable")
List<YourModel> getAllYourTableData();

假设您了解android arch组件中的回购模式。

您能告诉我如何调用此方法吗?它需要使用一个非主节点thread@faezesaghafi请检查更新的答案,让我知道是否还有任何问题。使用
Handler().post
不会在后台
Thread
自动运行其
Runnable
,是的,我不清楚Handler是如何工作的,我现在很抱歉。谢谢你的帮助@pskinkcan你能告诉我如何调用这个方法吗?它需要使用一个非主节点thread@faezesaghafi请检查更新的答案,让我知道是否还有任何问题。使用
Handler().post
不会在后台
Thread
自动运行其
Runnable
,是的,我不清楚Handler是如何工作的,我现在很抱歉。感谢您的帮助@pskinkIllegalStateException:无法访问主线程上的数据库,因为它可能会长时间锁定UI。在初始化DatabaseClass的Singleton类下,
appDatabase=Room.databaseBuilder(上下文,YourDatabaseClass.class,数据库名称).allowMainThreadQueries()//添加此行.build()记住,这将允许在主线程中执行文件室查询。这正是我不想要的。你应该在Q中指定这一点。无论如何,您可以使用simple Thread或AsyncTask来实现相同的功能。IllegalStateException:无法访问主线程上的数据库,因为它可能会长时间锁定UI。在初始化DatabaseClass的Singleton类下,
appDatabase=Room.databaseBuilder(上下文、YourDatabaseClass.class、数据库名称).allowMainThreadQueries()//添加此行.build()记住,这将允许在主线程中执行文件室查询。这正是我不希望您在Q中指定的。无论如何,您可以使用简单线程或AsyncTask来实现相同的功能。
public static List<YourModel> getAllData(){
return getYourModelDao.getAllYourTableData();
}
public void someFunctionWhereYouNeedNormalData(){
//assign to list
YourRepo.getAllData();
}