问题标签 [android-room]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5572 浏览

entity - Room Android:实体和 Pojos 必须有一个可用的公共构造函数

实体和 Pojos 必须有一个可用的公共构造函数。您可以有一个空的构造函数或参数与字段匹配的构造函数(按名称和类型)

我正在将房间整合到我现有的项目中。在使用 @Entity 标记注释实现 Parcelable 的 POJO 并进行必要的更改时,出现此错误。我已经有一个空的构造函数。任何帮助,将不胜感激。

0 投票
1 回答
1220 浏览

kotlin - Android Room + Kotlin 模式

Android Room 文档说我们在实例化 AppDatabase 对象时应该遵循单例设计模式。

我正在考虑它,我想知道是否建议将 AppDatabase 类放在我的 Application 类中。或者,如果我可以为此使用 Kotlin 单例。

假设我有一个名为 CarroDAO 的 DAO 和作为 RoomDatabase 的类 CarrosDatabase。

可以使用 Kotlin 对象/单例创建 DatabaseManager 类吗?

所以我可以像这样得到DAO类:

0 投票
2 回答
9164 浏览

android - 无法访问主线程上的数据库 - Android Room - 使用 ThreadPoolExecutor

我遇到了那个著名的错误"Cannot access database on the main thread since it may potentially lock the UI for a long periods of time"但是据我了解,我没有在主线程中访问数据库,因为我正在由 ThreadPoolExecutor 执行的 Runnable 中执行调用。我究竟做错了什么?

在下面的方法中,我使用一个 runnable 从网络获取数据并将其存储在本地数据库中。

数据源.save:

执行者定义为:

我得到的错误:

0 投票
1 回答
126 浏览

java - Room 如何通知 UI 数据已更改?

我有这个查询:

这是我的视图模型:

在我的活动的 onCreate 中,我调用:

JobService 中,我下载了一个 Json 并将其转换为Room对象并调用

但什么也没发生:-(

我必须手动触发房间刷新还是会自动为我触发房间刷新?我错过了什么吗?

编辑:

我添加了一些注销,这是到目前为止按此顺序发生的情况:

  • MainActivityViewModel创建并调用db.movieDao().getAll()
  • Activity 观察 ViewModelviewModel.getData().observe(this, adapter::setMovies)
  • setMovies用 0 个数据调用
  • 几秒钟后 JobService 已启动,加载数据并调用db.movieDao().insertAll(movies.results)

在这一点上,我期待来自 Room 的刷新调用,因为数据库数据已更改但没有任何反应。

0 投票
0 回答
753 浏览

android - 在 DAO 类 Room 持久化方法中传入的自定义对象

我正在尝试用Room persistence我有一个接受自定义对象并返回该行的 id 在数据库中的方法替换我的数据库

我想用 Room persistence DAO 方法替换这个方法

该场景的查询是什么?

0 投票
9 回答
18090 浏览

android - Room 不能选择一个构造函数,因为多个构造函数是合适的错误

我尝试在我的 android kotlin 项目中实现持久库,但在编译时发现此错误:

错误:房间不能选择一个构造函数,因为多个构造函数是合适的。尝试使用 @Ignore 注释不需要的构造函数。

错误代码:

0 投票
0 回答
666 浏览

java - Android 架构组件:如何观察数据库中的单个更改

我有几个问题,请看下面的问题:

守则

D b

模型视图

实体(科特林)

实时数据

问题一:

使用上面的代码,我的理解是我应该使用viewModel. 我想使用 ViewModel,但在“观察”时没有得到任何数据,我该如何解决这个问题?

但这不会返回任何数据,而以下效果很好:

问题2 :

如果我使用这个:

如何观察数据库中的单个更改,例如删除行或添加新行?

0 投票
2 回答
26810 浏览

android - Android Room FOREIGN KEY 约束失败

我正在尝试借助 Google 在 I/O 2017 中引入的 Android Room Persistence(一种 ORM)在 Android SQLite 中设计和实现文件夹树结构。在我的设计中,一个文件夹可以包含另一个文件夹和文件。这是我的文件夹和文件代码:

文件模型:

这是文件夹代码:

在它自己的 ID 列上有一个外键作为父级。

这是FolderDAO:

但是当我创建一个文件夹对象并尝试插入它时:

得到这个错误:

FOREIGN KEY 约束失败

有谁知道我的项目表有什么问题或建议另一种设计?

0 投票
2 回答
961 浏览

android - 尝试使用 Android 房间库缓存 HashSet 时出错

我愿意尝试来自 Android 的新 Room Library,但遇到了以下错误:

错误:(19, 29) 错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。

此错误涉及以下类成员:

我有以下课程:

此外,还有一个相对的 DAO 类:

由于我正在努力成为一名非常优秀的开发人员,因此我编写了一个单元测试如下:

我应该在这里做什么?

0 投票
2 回答
9937 浏览

java - 使用房间持久性在运行时生成查询

我想在运行时生成的 SQLite 数据库上运行查询(而不是 @Dao 中的标准编译时查询)。例如,我可能想在 SQLite 数据库中搜索 TEXT 列,以查看它是否包含 N 长度列表中的所有单词。在原始 SQLITE 中,N 为 3 的查询如下所示:

我尝试生成并传递查询的结尾,而不仅仅是传递变量。例如 :

在@Dao 中:

这似乎对我不起作用。您知道如何让运行时生成的查询与 Room 一起使用吗?

PS:

我已经调试了 Dao 实现并查看了它正在运行的语句。这确认了生成的查询信息,并且查询正在正确传递。我认为这是防止 SQL 注入的问题(也就是 SQLITE 问题,而不是 Room 问题) 在此处输入图像描述