在 MVVM Android 中使用共享首选项的最佳实践?

2024-04-01

我一直在寻找在 Android 的 MVVM 架构中使用共享首选项的最佳方法,但我只能找到一些片段,因此没有清晰的图像来以最佳方式做到这一点。因此我有几个问题:

  1. 我应该在应用程序上保留 SharedPrefs 的单例实例吗?
  2. ViewModel 和 Repository 应该使用共享首选项吗?
  3. 在哪里使用它们?假设有一个 Fragment、一个 ViewModel 和一个存储库。我应该从 ViewModel 中控制 Fragment 和 Repository 的 SharedPrefs 还是每个人都应该单独处理?例如。用户单击按钮保存设置。从片段保存到 SP 中?从 ViewModel 调用方法以保存在 SP 中?或者进一步重定向到 Reposioty 以使用 SP?

(*SP = 共享首选项)

我真的很感激获得一些有关 MVVM Android 中 SharedPreferences 最佳实践的建议


该图很好地代表了 MVVM 结构,在您的情况下,您希望在 localDataSource 中保存一些数据,例如 dataBase 或共享首选项,因此它建议您确实使用在存储库级别中保存的逻辑并从 ViewModel 中调用这些函数。

如果您使用共享首选项的相同引用,最好将其用作单例,而不是每次读取或写入时都创建它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MVVM Android 中使用共享首选项的最佳实践? 的相关文章

随机推荐

  • 找不到工具.jar

    我正在尝试构建 JOGL 的副本 但ant一直给我错误找不到tools jar 所以我在我的 JDK 目录中搜索 但也找不到它 有人可以帮我找到tools jar吗 您确定正在搜索您的JDK目录而不是JRE目录 我希望它在 JDK 中lib
  • startActivityForResult 似乎没有调用 onActivityResult

    当用户单击按钮时 它想要调用对话框 该对话框包含 ListView 中的产品列表 用户选择产品后 它应该转到上一个活动 我已经使用过startActivityForResult 有一些问题 我的调用活动位于选项卡活动组中的正常选项卡活动中
  • 如何解决 MVC 过滤器属性中的依赖注入

    我有一个从 AuthorizationAttribute 派生的自定义属性类 它对控制器操作执行自定义安全性 OnAuthorizationCore 方法依赖于各种其他组件 例如 DAL 来判断用户是否可以调用操作 我正在使用 Autofa
  • 如何在Python中仅初始化一次数据库连接并在运行时重用它?

    我目前正在开发一个巨大的项目 该项目不断执行查询 我的问题是 我的旧代码总是创建一个新的数据库连接和游标 这极大地降低了速度 所以我认为是时候创建一个新的数据库类了 目前看起来像这样 class Database object instan
  • 无法将 varchar 值转换为 int 数据类型

    我有简单的代码 我需要进行简单的操作 column A 100 但我无法将varchar类型转换为int 我的错误是 将 varchar 值 0 27 转换为数据类型 int 时转换失败 SELECT POWIERZCHNIA POWIER
  • stat_contour 无法生成等高线

    我需要通过添加行stat contour to my ggplot ggplot2 阴谋 不幸的是 我无法向您提供应该评估点值的真实数据 然而 另一个易于重现的示例的行为是相同的 testPts lt data frame x rep se
  • TFS 2015 - TF401002:SQL Server 数据库引擎无法将数据库备份保存到路径

    尝试为 TFS 2015 创建计划备份时 我收到以下消息 TF401002 SQL Server 数据库引擎无法将数据库备份保存到路径 share d TFSBackups 请授予 SQL 服务帐户读 写权限访问该文件夹 我似乎找不到适合我
  • Google 应用引擎或查询 (python)

    任何人都可以分享您在应用程序引擎中进行 或 查询的方法吗 假设我有 class A db model db Model valueA db ListProperty basestring 在 valueA 我有 aaa aaa bbb bb
  • Android开发者控制台错误报告

    我发布了一个免费的应用程序 有几个用户发表了评论 说应用程序强制在谷歌的反馈中关闭 当天就有数百次下载 留存率高达 84 Google 在开发者控制台中的错误报告显示有 0 个错误 我从来没有遇到过在控制台中报告任何错误的应用程序 它真的有
  • SQL Server 中子查询的总和

    我有一个查询 里面有一些子查询 我想添加一个求和查询来对它们进行求和 我怎样才能做到这一点 example Id SELECT COUNT FROM table1 LEFT JOIN table2 on as col1 SELECT COU
  • #评估图像数据

    如何使用 Eval 将 sql varbinary 数据 图像 绑定到图像 像这样的东西
  • Homebrew pyenv安装错误dyld:未加载库:/usr/local/opt/readline/lib/libreadline.7.dylib

    在 MacOS Mojave 上从 Homebrew 安装 pyenv 后 尝试安装任何 python 版本时出现构建错误 跑步时pyenv install对于任何版本 构建都会失败并出现错误 dyld Library not loaded
  • TypeScript 类型根据其他参数缩小回调中函数参数的范围

    我正在处理经典的节点回调 例子 myFunction foo err Error null data Buffer gt if err typeof err is Error typeof data is Buffer undefined
  • codeigniter 数据传递控制器->库->视图

    我有一个代码点火器问题 我试图将数据从控制器发送到库 发送到视图 我在视图中收到此错误 Message Undefined variable crimes 文件名 views crime view php Line 45 在调试时 我转储
  • 如何将 .php 文件上传到 Heroku

    我需要将 php 文件上传到我的 Heroku 网站 这是如何使用终端完成的 我已登录终端并可以看到我的应用程序等 谢谢你的帮助 如果您需要通过终端在 Heroku 应用程序上上传文件 您需要跟踪它并使用Git 安装并配置 heroku 工
  • 就空间而言最快的方法——用Python找到素数

    也许这是一个愚蠢的问题 但我想知道你是否可以提供用Python查找素数的最短来源 我还想知道如何使用 map 或 filter 函数查找素数 谢谢 编辑 当我说最快 最短时 我的意思是使用较少字符 单词的方式 无论如何 不 要考虑竞争 我想
  • 有没有办法强制 Gerrit 将分支中的所有提交推送到代码审查?

    Gerrit 将合并提交历史记录中较早且位于存储库的不同 分支 中的潜在未经审核的更改 这是一个例子 结账 gerrit 分支devel 创建file1 txt 添加 提交 推送到refs heads temp branch 创建file2
  • 我在运行 flutter create my_appName 时收到以下错误:“my_appName”不是有效的 Dart 包名称

    我尝试过将flutter升级到最新版本 我仍然遇到同样的错误 我遇到了完全相同的错误 按照 Flutter 团队附加的命名约定重命名我的工作目录后here https dart lang github io linter lints pac
  • 自动将提交消息附加到 Git 中提交的文件

    我的目标是在存储库中每个文件的末尾维护所有提交历史记录 消息的日志 我使用 commit msg 挂钩来获取提交消息 准备它并将其附加到文件中 但是 我注意到由于文件在暂存后发生了更改 因此 git status 仍然显示为已修改 执行此操
  • 在 MVVM Android 中使用共享首选项的最佳实践?

    我一直在寻找在 Android 的 MVVM 架构中使用共享首选项的最佳方法 但我只能找到一些片段 因此没有清晰的图像来以最佳方式做到这一点 因此我有几个问题 我应该在应用程序上保留 SharedPrefs 的单例实例吗 ViewModel