当前位置: 首页 > 知识库问答 >
问题:

在Android中使用room来获取表中的更改

宋建本
2023-03-14

我正在使用Room从表中加载数据,并在android应用程序中显示它。

然而,该表中的行数很大,所以我不能使用LiveData在表更改时自动触发并更新我的回收器视图

我目前正在做的是,当在我的应用程序中的某个点进行更改(插入-删除-更新)时,存储库会保留所有更改的列表,当我移回显示这些更改的屏幕时,viewmodel会将行ID与加载的行ID进行比较,并根据需要更新ui。

有更好的方法吗?例如,使用LiveData进行查询,该查询将包含所有已更改ID的列表?

共有1个答案

严峰
2023-03-14

您应该在ViewModel中使用LiveData,而不是手动跟踪存储库的所有更改并更新您的UI。

是什么让您认为您不能使用LiveData,因为您的数据库表太大了?当你尝试的时候,你会得到某种错误吗?

使用LiveData时,不需要编写跟踪更改了哪些id的查询。所有这些都是由LiveData在后台线程上完成的,当观察到的任何数据发生变化时,LiveData的观察者会通过onChanged()方法得到通知。

我发现本教程非常有助于将LiveData与Room数据库结合使用:https://medium.com/mindorks/using-room-database-with-livedata-android-jetpack-cbf89b677b47

 类似资料:
  • 不知道在Android房间查询中使用表名时,如何避免硬编码?我用开发,但老实说,在这个问题上,Java还是kotlin并不重要。 让我们看看简单的类: DAO接口: 实体类: 您可以看到表名“user”是在userDAO中的@query中硬编码的。如何避免呢?如何引用@Entity参数TableName? 我想有所有的名字在一个而且只有一个地方。

  • 所以我遵循MVVM架构,在那里我有一个银行交易数据库: 我的Dao类有两个查询: 仓库: 视图模型: 在主片段中,我正在用数据库中的所有事务填充回收视图: 我的问题是:如何从DAO调用函数 要填充相同的recyclerView(当按下某个按钮时)?我不能吃这样的东西 在我的DAO中,因为查询应该在另一个线程上执行(我不允许在主线程上执行),所以我的DAO不能返回事务列表<你能提供帮助吗?

  • 一切正常(使用AsyncTask插入、更新、删除),但按id获取一行不是。。。 主要问题是有两种活动。 回收视图 我想在点击RecyclerView列表项后,从数据库中按id获取一个项。如果我用LiveData获取它,我就无法将其与UI线程中的变量同步。 如何从数据库中获取一行? 在DAO中,我有: 在存储库中: 如果我把它写在主线程里 它给出了一个错误: 我应该使用AsyncTask,但如何使用

  • 问题内容: 我正在为ElasticSearch配置JDBC河,但找不到任何好的配置示例。我已经阅读了Elasticsearch-river- jdbc GitHub上的所有页面。 我有一个SQL查询,我需要每X秒从所有表列中获取更改。我如何告诉JDBC river某些行已更改并应重新索引? 在ES服务器启动期间获取数据,正在进行轮询,但是没有从DB到ES获取更改。 我的配置: 谢谢。 问题答案:

  • 本文向大家介绍使用ABAP,通过从数据库表获取数据来更改itab中的值,包括了使用ABAP,通过从数据库表获取数据来更改itab中的值的使用技巧和注意事项,需要的朋友参考一下 您应该使用Modify语句执行此操作,如下所示- 还要注意,当您拥有带有标题行的内部表itab时,这意味着您具有表itab和结构itab,并且其用法取决于情况。像MODIFY和LOOP AT这样的命令很少同时使用。 另外,请

  • 在下面的代码中,我得到。我读到,也可以直接从获取最后插入的行id。在我的代码中,我把空插入改为长,并尝试了许多其他的东西,就像我在互联网上找到的例子一样,但是每次我都会出错。你想给我提供一个代码/解决方案,从@插入获取行/用户ID吗? 实体 存储库 查看模型 片段/活动