android-如何使用Room从db获取简单列表?
我正在android应用程序中使用组件库。在某些情况下,需要使用Livedata并观察它的数据,但有时我只想得到一些普通的列表,而不是Livedata,我如何才能做到这一点?用简单的方法查询数据库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>? 或在构建房间数据库时,您可以允许数据库在主线程上执行,如下所示(尽
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();
}