java - 远程类中的 MVVM 共享首选项
问题描述
因此,我通过遵循官方 Android 文档架构(如下)和其他互联网资源,使用 MVVM 模式实现了我的第一个 Android 项目。
在另一个活动中,我使用了PreferenceFragmentCompat来保存一些用户设置。现在我需要远程数据源类中的这些设置,但没有上下文我无法访问共享首选项。
关于如何做到这一点的任何建议?
PS我正在使用Java...
解决方案
从他们的文档(https://developer.android.com/reference/androidx/preference/PreferenceFragmentCompat)
要检索此片段中的首选项层次结构将默认使用的 SharedPreferences 实例,请使用与此片段相同的包中的上下文调用 PreferenceManager.getDefaultSharedPreferences(android.content.Context)。
我不相信这指的是文件所在的确切包,而是源文件的整体顶级包。因为我能够将我的片段/活动拆分为与我的 PreferenceFragmentCompat 所在的包不同的包,并且能够检索存储的设置。
我不建议将片段/活动上下文传递给您的远程数据源类,但如果您有匕首设置,您可以通过构造函数注入从应用上下文创建的 PreferenceManager 类的实例并获取您需要的任何设置。或者,您可以从视图 -> vm -> 存储库/数据源传递数据源所需的那些设置。
将 MVVM 与存储库模式(您的数据源类)一起使用,我将执行以下操作:
1.) 创建一个 ViewModel,它包含您的数据源/存储库类的实例。
2.) 从您的视图(活动/片段)中,获取 PreferenceManager 的实例并获取您需要的设置。
3.) 将它们传递给您的 viewModel,然后将其传递给您的数据源/存储库。
4.) 使用这些设置在数据源类中做任何你需要的事情
... inside your view class
val pref = PreferenceManager.getDefaultSharedPreferences(context).getString(PREF_KEY_NAME, null)
viewModel.yourMethod(pref)
... inside your viewmodel class
fun yourMethod(pref: String?) {
repository.doSomething(pref)
}
... inside your repository/data source class
fun doSomething(pref: String?) {
// whatever you need to do with this pref.
// e.g. api call
api.doMethod(pref)
}
推荐阅读
- flutter - Flutter 通知没有出现在设备中,但在控制台中显示
- repast-simphony - 既然 Groovy 编译器 2.4 正式不可用,如何在 Eclipse 中启动 Repast Simphony?
- c# - 如何配置自托管 WCF 服务以压缩消息
- java - 如何在springboot中获取BeanPostProcessor对象?
- php - 将变量共享到 laravel 布局
- google-apps-script - OnEdit(e) 由多个范围内的编辑触发
- vue.js - CI/CD 运行时环境中的点 env 变量
- sockets - 错误:错误的文件描述符错误套接字编程
- java - 在 tomcat 8.5 中缺少 ServerSocketFactory
- wordpress - 使用dokan的多运输中的woocommerce自定义费率