如何在 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 2 与ViewModels
结合使用的信息,请参阅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属性