如何在 ViewModel 中访问 SharedPreferences?

Posted

技术标签:

【中文标题】如何在 ViewModel 中访问 SharedPreferences?【英文标题】:How to access SharedPreferences in a ViewModel? 【发布时间】:2019-06-24 22:00:41 【问题描述】:

我正在使用 MVVM 开发一个 android 应用程序。我需要在ViewModel 中访问SharedPreferences,但我不知道该怎么做。

我知道在继承AndroidViewModel 时可以访问上下文,但我想知道是否可以以及如何使用 DI 容器(Dagger 2)来访问。

【问题讨论】:

您还可以对 ViewModel 使用以下方法:***.com/questions/50673266/… 【参考方案1】:

这是可能的。正如您所提到的,您的 ViewModel 必须扩展 AndroidViewModel 然后调用 getApplication() 并在访问 SharedPreferences 时将其用作上下文。

对于在ViewModel 中使用Dagger 2:您不能通过参数或字段注入直接在ViewModel 中注入任何东西,因为您需要使用ViewModel Factory 并在那里注入对象首先将它们传递给您想要的任何ViewModel


要了解更多关于将 Dagger 2ViewModels 结合使用的信息,请参阅this article。


更新(2020-08-06):

可以在 ViewModels 中使用 Dagger 2 注入,请查看 Kotlin Clean Architecture 库示例了解如何使用它。

https://github.com/android10/Android-CleanArchitecture-Kotlin

【讨论】:

基本上,您必须将视图模型工厂注入您的片段/活动,然后使用它来检索视图模型。我会推荐这种方式,而不是扩展 Android 视图模型。很好的答案

以上是关于如何在 ViewModel 中访问 SharedPreferences?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 viewmodel 中访问 mvvm 模型中的控件?

如何在 KnockoutJS 中访问 ViewModel 之外的 observable?

如何从ViewModel访问附加到窗口的Behaviors属性

如何从 View 和关联的代码隐藏文件中访问我的 ViewModel?

如何从继承的用户控件访问 viewModel 依赖属性?

如何从 viewmodel 访问用户控件上的命令