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

android - 单元测试室和 LiveData

我目前正在使用新的Android Architecture Components开发应用程序。具体来说,我正在实现一个房间数据库,LiveData它在其中一个查询中返回一个对象。插入和查询按预期工作,但是我在使用单元测试测试查询方法时遇到问题。

这是我要测试的 DAO:

NotificationDao.kt

如您所知,查询函数返回一个LiveData对象,如果我将其更改为List,Cursor或基本上任何内容,那么我会得到预期的结果,即插入数据库中的数据。

问题是以下测试总是会失败,因为对象valueLiveData总是null

NotificationDaoTest.kt

所以问题是:有谁知道执行涉及 LiveData 对象的单元测试的更好方法?

0 投票
3 回答
8043 浏览

android - Android 房间持久化库 - 如何更改数据库版本

更新数据库版本后,我不清楚如何使用房间。

例如,假设我最初在房间中定义了以下数据库:

然后我更改版本,使其现在看起来像这样:

当我看到更改版本时,我的意思是我可能在数据库中添加或删除了列,所以它不一样。我的问题如下:

我现在需要维护两个数据库吗?v1 和 v2 ?有没有办法将实体轻松复制到 v2 ?同样在更改版本时,只需将其从 1 更改为 2 就足够了,或者我是否必须创建另一个名为 EventDatabase2 的类?

这也是我正在使用的房间版本:android.arch.persistence.room:runtime:1.0.0-alpha1

0 投票
10 回答
49299 浏览

android - 如何在运行时动态查询房间数据库?

问题

是否可以在运行时构造查询?


用例

limit部分是可选的。也就是说,它应该能够有或无限制地执行相同的查询。


更复杂的用例

在前一种情况下,可以进行两个有限制部分和没有限制部分的静态查询,并且每次都可以使用适当的一个。但有时我们可能不得不处理更复杂的情况,例如构建过滤器。

在这种情况下,与前面的示例不同,将有多个可选部分。对于一个图书表,我们可能需要根据图书所属的类别、作者姓名、价格范围、出版日期等进行过滤。几乎不可能将这些部分的所有组合都进行静态查询。

0 投票
0 回答
2019 浏览

android - 如何使用改造检索到的模型信息初始化房间持久库数据库?

我无法理解如何将改造与android 持久图书馆室一起使用。

假设我定义了以下模型实体:

并且可以说我最初是从经过改造的网络服务中获取这些信息的。因此,在我调用改造服务后,它将返回一个填充了 Event 类型的类(使用 gson)。

现在一切都很好,我们有一个名为 Event 的完全填充的类,其中包含通过改造 api 服务调用来自我们的休息服务器的数据。

现在我想确保这些信息进入房间持久库。我该怎么做呢:

即使我构建了数据库,我只是将类名传递给它,而不是返回的实际类改造。

例如,要建立一个房间数据库,我会这样做:

现在我们有了一个事件数据库,但是我如何将我的信息从改造中获取到数据库表 MY_EVENT_TABLE 中?

我有一个想法,但不确定它是否正确或有效。如果我在房间里有这样的刀:

从服务器获取数据后,我可以调用 DAO 插入方法吗?

所以它会是:eventDao.addEvent(event);

这是推荐的方式吗?

0 投票
4 回答
28186 浏览

android - Android -room 持久库 - DAO 调用是异步的,因此如何获取回调?

从我读过的内容来看,Room 不允许您在主线程上发出数据库查询(因为可能会导致主线程延迟)。 所以想象一下我正在尝试更新 UI 主线程上的文本视图,其中一些数据我将如何获得回调。让我给你看一个例子。想象一下,我想将我的业务模型数据存储到一个名为 Events 的对象中。因此我们会有一个 EventDao 对象:

假设我们在下面有这个 DAO 对象:

现在在某些活动中,我有一个 textview,我想更新它的值,所以我这样做:

由于获取是在主线程之外发生的,我认为我不能这样称呼它并期待顺利更新。这里最好的方法是什么?

更多信息:我想使用房间数据库作为检索模型信息的机制,而不是将其静态保存在内存中。因此,在我通过休息服务下载模型后,我可以通过数据库在本地使用该模型。

更新:所以因为我要返回一个实时数据,所以我可以这样做:

这适用于非常小的东西。但想象一下我的数据库有一百万个项目。然后当我打这个电话时,检索数据会有延迟。第一次调用它时,用户会看到有延迟。如何避免这种情况?所以要明确一点,有时我不想要实时数据,我只需要在查看后更新。我需要知道该怎么做?即使它没有使用 liveData。

0 投票
3 回答
2644 浏览

android-room - 字符以房间持久性 android 中的查询开头

我尝试了以下查询,但没有给出任何结果。

SELECT * FROM details WHERE name LIKE :name

我使用 AutoCompleteTextview 进行搜索。是否有任何查询可以找到子字符串?

0 投票
9 回答
147865 浏览

java - Room - 模式导出目录未提供给注释处理器,因此我们无法导出模式

我正在使用 Android 数据库组件室

我已经配置了所有东西,但是当我编译时,Android Studio 给了我这个警告:

模式导出目录未提供给注释处理器,因此我们无法导出模式。您可以提供 room.schemaLocation注释处理器参数或将 exportSchema 设置为 false。

据我了解,这是数据库文件所在的位置

它如何影响我的应用程序?这里的最佳做法是什么?我应该使用默认位置(false值)吗?

0 投票
1 回答
30220 浏览

android - Android Persistence room: "Cannot figure out how to read this field from a cursor"

I'm trying to create a relation between two database tables using the new Android Persistence Room Library. I looked at the documentation and tried to implement the example found at https://developer.android.com/reference/android/arch/persistence/room/Relation.html:

I get the following error

in relation to:

I would like to point out that I found some things in their docs really confusing. For example the lack of @PrimaryKey and also the fact that the User class is missing the @Entity annotation, although it's supposed to be an entity (as fas as I see it). Did anybody run into the same problem? Thanks a lot in advance

0 投票
1 回答
1435 浏览

android - 在 Google Drive 应用程序文件夹中存储房间数据库?

我还不熟悉Room和 Google Drive API,我想知道是否可以创建 Room 数据库并将其存储在隐藏的 Google Drive App 文件夹中以便跨设备同步。如果有人实现了类似的东西,一个简短的例子会很棒。谢谢!

编辑:

使用 LiveData 观察 Room 数据库何时发生变化,然后触发同步到 Google Drive 怎么样?

0 投票
1 回答
5706 浏览

android - Android 架构组件 liveData 和 room - 最低要求是什么?

我意识到它处于 alpha 阶段,但是我想知道像 liveData 和 room 这样的 android 架构组件是否有任何最低要求?例如 min android api/sdk 等。我看过这里 ,但如果有任何要求,它没有显示给我。我可以假设我可以使用这个权利至少回到 android ICS 吗?