问题标签 [android-architecture-components]

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 回答
2281 浏览

android - 直接实例化 ViewModels,不使用 ViewModelProviders.of 方法

我有一个名为RecipesViewModel. 通常,我以这种方式实例化它:

但是现在我使用的是 dagger2,所以我@Inject在这个 ViewModel 的构造函数上放了一个注释,所以我可以使用字段注入器将它直接注入到我的片段中。

我的问题是:我是否会以这种方式而不是ViewModelProviders.of方式启动视图模型?我的 ViewModel 已经是 Scoped 了,所以在上下文中只创建了一个实例。

其他选项是仅将工厂实例化移动到 dagger2 模块,但如果没有问题,我更喜欢第一种方法。

- 编辑 -

阅读文档android.arch.lifecycle.ViewModel,我有点害怕。当使用 ViewModelProviders.of 提供范围(片段或活动)时。如果我直接实例化它,作用域是什么?

ViewModel 是一个类,负责为 Activity 或 Fragment 准备和管理数据。它还处理 Activity / Fragment 与应用程序其余部分的通信(例如调用业务逻辑类)。

ViewModel 始终与范围(片段或活动)关联创建,并且只要范围处于活动状态就会保留。例如,如果它是一个活动,直到它完成。

换句话说,这意味着如果 ViewModel 的所有者因配置更改(例如旋转)而被销毁,则不会销毁 ViewModel。所有者的新实例将重新连接到现有的 ViewModel。

- /编辑 -

RecipesViewModel 代码如下所示:

0 投票
1 回答
1229 浏览

android - 如何为 Android App Architecture ViewModels 创建 Android UI 测试?

我一直在使用新的 Android 应用架构组件。测试文档留下了很多想象空间。我查看了android architecture components testing part of the documentation,它非常含糊,如下所述。

用户界面和交互:这将是您唯一需要进行 Android UI Instrumentation 测试的时候。测试 UI 代码的最佳方法是创建 Espresso 测试。您可以创建片段并为其提供模拟 ViewModel。由于 Fragment 仅与 ViewModel 对话,因此对其进行模拟就足以完全测试此 UI

您如何通过将 ViewModel 的模拟传递给片段来编写 Espresso 测试?我还查看了 Google 提供的示例应用程序,它们也不是很有帮助。

假设这是我的示例片段类。

0 投票
2 回答
17929 浏览

android - 警告:警告:注释处理器'android.arch.lifecycle.LifecycleProcessor'支持的源版本'RELEASE_7'低于-source'1.8'

尝试使用带有架构组件和 Kotlin 的 Android Studio 3 Canary 5 构建示例会给出此警告。

谁能告诉我原因?

谢谢, 欧维

编辑#1:这是 Dan Lew 前段时间制作的样本

https://github.com/dlew/android-architecture-counter-sample

构建.gradle:

0 投票
1 回答
2370 浏览

android - 带有 Android 架构组件的 MVVM

我正在探索新的 Android 架构组件并希望将其实现到 Android 应用程序中。当我使用 iOS 开发的范例时,我对 MVVM 非常熟悉。阅读了 Google 提供的 Android 架构组件指南:https ://developer.android.com/topic/libraries/architecture/guide.html

我只有几个问题...

在上面提到的指南中,Google 使用访问这些 Web 服务 API 的类——如果应用程序上只有一个屏幕需要来自 REST API 的数据,UserRepository他们继续制作这个类可能很好。Singleton

我关心的是这个;谷歌似乎提倡需要在每个 ViewModel 的基础上创建一个存储库类。这对我来说听起来很不对,在Singlton应用程序中有这么多课程。如果我们有 10 个屏幕,有 10 个 ViewModel - 每个都需要自己的Repository module- 我们的应用程序中就有 10 个单例。从 iOS 开发人员的角度来看,拥有这么多是错误的。

对此的解决方案是拥有一个具有公共方法的中介(存储库)类,公开 API 以从 REST API 获取数据。Web 服务部分将在其自己的类中。这样,我们就可以很好地分离关注点。

最佳实践是每个 ViewModel 拥有一个存储库类 - 还是每个应用程序拥有一个?我对此不是 100% 确定的。

最后,我也有同样的担忧Room——谷歌是说我们在每个 ViewModel 基础上创建一个数据库,还是每个应用程序只创建一个数据库?

0 投票
1 回答
2194 浏览

android - 如何用 Android Room 表示嵌套的@Relation?

这是我在 kotlin 中的 POJO:

如何用 Room 表示这种嵌套关系?是解决方案之一,但它不包含嵌套关系。我专门寻找解决与 Room 的嵌套关系。

0 投票
2 回答
9996 浏览

android - 如何在android房间中表示嵌套的一对多关系?

这是示例 POJO

这是我的UsersWithPets类,用于获取所有用户和宠物。

我的用户道

和用户数据库

UserWithPets ”嵌入用户对象并与“Pet”的关联列表相关但是如果我的“ Pet ”POJO 可以与“ Category ”有一对多关系,我如何获取“ Category ”列表。

此外,用户 DAO 通过映射和之间的 id 仅返回所有“用户”及其“列表<宠物>” 如果的“宠物”POJO 可以有许多“类别”(类别列表),我如何创建我的DAO 和抽象数据库类,这样查询特定的“用户”id 将返回“用户”对象及其“宠物列表”和包含“类别列表”的单个“宠物” ,查询所有将返回所有“用户列表”,其中每个用户包含一个“宠物列表”,每个宠物包含一个“user.idpet.userId类别列表"

0 投票
32 回答
97165 浏览

android - 无法创建类 ViewModel 的实例

我正在尝试使用 Android 架构组件编写一个示例应用程序,但即使尝试了几天,我也无法让它工作。它给了我上述例外。

生命周期所有者:-

视图模型:-

0 投票
1 回答
101 浏览

android - Android 架构组件 LiveData 数据变化

我已经开始研究最近引入的 android 架构组件。

我的问题是我只想要最后添加的元素而不是数据库中所有项目的列表,其次我想知道为新模型自动生成的 id,在插入元素时获取该 id 的最佳方法是什么。

0 投票
2 回答
1042 浏览

android - 如何在 Android 中填充 Room Persistence 数据库?

我有一个具有下一个结构的旧数据库: 数据库结构

问题是在 Room Persistence Database 中创建和填充表的最佳方式是什么。我现在这样做的方式是将表数据存储在 strings.xml 中,然后使用 firstrun 将其推送到数据库中。

但我认为将大量数据存储在字符串数组中并在第一次运行时获取它是不正确的方法。

0 投票
0 回答
153 浏览

android - 已在 alpha-3 中受保护的 Room 的 FramworkSQLiteDatabase 类的 Workoround?

我在RoomFrameworkSQLiteDatabase的 SQLite 助手中使用该类(这几乎是代码)。

我现在尝试从 to 更新 Roomalpha-1并且alpha-3Gradle 构建失败,说FrameworkSQLiteDatabase无法从我的代码中访问,这实际上是真的:他们保留了构造函数public,但他们创建了类protected(这似乎是他们所做的唯一更改)。

我对 Room 很陌生,我想知道是否有任何 API 或方法可以解决这个问题。

非常感谢你们!