问题标签 [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 投票
1 回答
210 浏览

android - 如何为android房间中的一对多关系创建recyclerview适配器

大家好,我在这里需要真正的帮助,我的整个应用程序都依赖于此。我正在尝试在 android 房间数据库中的 2 个实体之间创建一对多的关系。我想知道如何提取两个实体的数据,我可以显示狗的名字和所有者的名字,以及如何为此实现 recyclerview 适配器。以下代码是我从开发人员文档中得出的. 提前致谢

0 投票
1 回答
143 浏览

java - 如何在后台任务中正确使用 Android Room(与 UI 无关)

目前 Room 与 DB 到 UI 的集成运行良好:

用于 DB 操作的 Dao

用于与 Daos 交互并将数据缓存到内存中的存储库

ViewModel 抽象存储库并链接到 UI 生命周期

但是,出现了另一种情况,我很难理解如何正确实现 Room 使用。

我有一个纯静态的网络 API,它反映了服务器的 REST 架构。

有一个解析器方法遍历 URL 结构并通过反射将其转换为现有 API,并调用他找到的任何最终方法。

在此 API 中,每个 REST 操作都由等效 REST 命名结构类下的方法表示,即:

REST 中的 /contacts 等同于 API 中的类 Contacts.java

POST、GET、DELETE in rest 等同于各自类中的方法

例子:

这是我的困难;我应该如何正确/正确地将 ROOM 集成到该 POST 方法中?

目前我有一个临时解决方案,即实例化我需要插入数据并使用它的存储库,但这是每次调用该方法时的一次性情况,因为这里绝对没有生命周期,也没有办法有一个足够细化的东西值得拥有(我不知道我需要在 API 中建立一个存储库多久才能证明将其缓存 X 时间是合理的)。

我目前正在工作的示例:

或者将其用作单例:

鉴于生命周期的存在,与 View 相关的 Room 交互一切正常,但在这种情况下,我不知道如何正确执行此操作;这些不仅仅是视图可能调用网络请求的情况 - 然后我只使用 networkboundrequest 或类似的 - 这也可以是服务器发送的数据而应用程序从未请求它,例如更新应用程序相关数据,如用户启动与您的对话 - 该应用程序无法知道这一点,因此它首先来自服务器。

如何正确实施?我还没有找到任何关于这种情况的指南,我担心我可能做错了。

编辑:根据使用的标签和提供的示例,此项目不是 Kotlin,因此请提供任何不依赖于迁移到 Kotlin 以使用其协程或类似 Kotlin 功能的解决方案。

0 投票
0 回答
38 浏览

java - 即使 Android-Room-LiveData-Fragments 中的数据库中存在数据,DAO 中的查询也始终返回 null

我的数据库类是

存储库类是

DAO 类

ViewModel 类是

在按钮单击的片段中,我调用公共方法 getVillages 总是返回 null。

在 Fragment Button Onclick 方法中,我使用了这样的观察者

对 ViewModel 方法的此调用不返回任何内容。在调试应用程序时,我发现来自 DAO 的查询返回 null,即使数据库具有预填充的值。

请指导我解决问题,因为我已经浪费了 6 个小时在互联网上寻找解决方案。

0 投票
0 回答
29 浏览

android - 删除或更新查询室。安卓

这是我的代码:

对于这种情况,我需要一个更新或删除查询:选择了 5 个项目,并且有一个用于减少这些项目的按钮,每个按钮将被按下更新查询执行并且数量减一,如果项目变为 0,则删除查询执行并从表中删除行。我写了上面的代码,但效果不好。知道这段代码有什么用吗?

先谢谢了 。

0 投票
1 回答
41 浏览

android - 如何构建和查询 Room DB 以返回多个类的对象列表?

请耐心等待,这是一个棘手的问题,我发现的哪些资源并不能真正帮助我解决问题。

我正在尝试在 Kotlin 上构建一个面向房地产的应用程序。它必须在某个点显示RecyclerView具有多个对象类别的 a(例如:房屋、公寓、地块、建筑物等)

我见过多个设计为接受多个类的 RV 示例,但我正在努力将数据库和在表和 POJO 之间转换的中间类放在一起。

到目前为止,我已经想到了以下几点:

  • 我必须有一个 Properties 表来存储每个对象的唯一 ID,以及它的类型的另一个标识符和每个属性共有的一系列值(例如,地址、价格等)
  • 对于每个实体类型,我必须有一个表格,可以独立列为房地产项目(例如,房子、公寓、一块土地、建筑物,你有什么)。这些表上的每一行都有一个主外键,引用其在 Properties 表上的等效项。

现在是意想不到的哈瓦那人。我决定在RecyclerViewGoogle 为像我这样的新手准备的 Kotlin 代码实验室的基础上开始草拟我的项目。其中数据以这种方式从数据库中检索:

this.plots = Transformations.map(database.RealtorDao.getPlots()) { it.asDomainModel() }

当数据库向您吐出的列表中的对象都是单一类型时,这很顺利,但是如果您需要它们属于不同的类以便适配器可以区分它们会发生什么?

或者唯一的方法是构建一个包含大约一百列的巨大表,其中到处都有空值,并且仅在以前面描述的方式解析对象之后才对对象进行排序?

0 投票
3 回答
3370 浏览

android - 房间数据库:java.lang.reflect.InvocationTargetException

我正在我的新应用中实现 Room 数据库。设置数据库时出现此错误:

这是我的数据库类的样子:

实体:

这是转换器:

当我删除 @Database 注释时,错误消失了,所以我认为实体本身可能有问题。尝试将 val 更改为 var,添加 @ColumnInfo(name=...) 但没有任何帮助。

--stacktrace 给出了这个:

0 投票
1 回答
1997 浏览

android - Android Paging 3 库 - 用于从 Room 数据库中分页数据,数据更改时流变为空

我正在尝试使用 android Paging 3(版本 3.0.0-SNAPSHOT)从 Room 数据库(无远程数据源)中分页数据。

最初页面加载数据成功,但是当一个新的“条目”添加到数据库中并且我返回到这个页面时,collectLatest 被触发但没有加载数据(“pagingData”条目列表为空)

这是我的查询:

这是我的视图模型:

在我的片段中,我正在观察这样的数据:

这是我的适配器:

0 投票
1 回答
122 浏览

android - java.lang.IllegalStateException:迁移没有正确处理。表未更改

我在尝试为房间迁移编写示例测试时遇到问题。当我运行测试时,我遇到了上述异常,但是导致问题的表在数据库版本之间没有变化。

我可以看到发现和预期之间的区别,但我不知道是什么原因造成的。我的 UserSettings.kt 类:

编辑 发现了它的已知问题,用于 Roboelectric 和迁移测试。 由于“primaryKeyPosition”值错误,房间数据库迁移测试出错

0 投票
1 回答
98 浏览

android - Android Room 库与 Requery Sqlite 库冲突

我有一个已经在使用的大项目,有很多(数百个)类。我想添加一个功能,比如我想写入手机的 SQL 数据库。我想使用 Android Room 库。根据文档和其他可靠来源,我做的一切都很好。但是,当我编写包含 @Database 注释的数据库类时,它给了我错误“找不到符号类”,这与我正在编写的代码无关,这是几个月前编写的。如果我删除 @Database 注释,它的编译和运行良好。你能帮忙解决吗,因为我没有找到这样的案例?

我现在澄清了真正的冲突。问题是在这个项目的早期使用了“requery sqlite library”,现在这个库和房间库之间存在冲突。

@Database(entities = [LocationEntity::class], version = 1) 行在 Requery Sqlite 库中使用实体“ChargeItem”时出错

此 ChargeItem 是为重新查询库编写的类。

0 投票
1 回答
66 浏览

android - Room TypeConverter 类无法编译

我正在尝试将Room TypeConverter(Room 版本 2.2.5)用于枚举,但是在编译时我收到了Class is referenced as a converter but it does not have any converter methods.正在查看 Converter.java 类,它确实缺少我定义的转换器方法。我已将 Gradle 中的 annotationProcessorOptions 设置为"room.incremental":"true". 有没有人遇到过这个问题?