【问题标题】:About Shared Preferences关于共享首选项
【发布时间】:2014-07-30 11:25:26
【问题描述】:

我正在寻找在活动期间存储用户数据(例如(IP 地址、端口号、用户名、密码))的最佳方式。

所以我决定使用 SharedPreferences。在提到this example 时,我看到一个答案是“如果用户从以下位置清除应用程序数据:

设置 -> 应用程序管理器 -> 你的应用程序 -> 清除数据

然后所有保存在共享首选项中的数据都将被删除

这是真的吗?请帮我解决一下这个。我推荐了developer guide 但它没有提到用户可以清除共享首选项数据。

这是一个好方法吗?还是有其他更好的获取方式?

【问题讨论】:

标签: android sharedpreferences storage


【解决方案1】:

是的,如果用户通过设置清理数据,那么共享偏好中的所有数据都将消失

Android 为您提供了多种保存持久应用程序数据的选项。您选择的解决方案取决于您的特定需求,例如数据是否应该对您的应用程序私有或可供其他应用程序(和用户)访问,以及您的数据需要多少空间。

您的数据存储选项如下:

共享偏好 将私有原始数据存储在键值对中。

内部存储 将私有数据存储在设备内存中。

外部存储 将公共数据存储在共享的外部存储上。

SQLite 数据库 将结构化数据存储在私有数据库中。

网络连接 使用您自己的网络服务器将数据存储在网络上。

Android 为您提供了一种方法,甚至可以将您的私人数据暴露给其他应用程序 - 使用内容提供程序。内容提供者是一个可选组件,它公开对您的应用程序数据的读/写访问,受您想要施加的任何限制的约束。有关使用内容提供程序的更多信息,请参阅内容提供程序文档。

【讨论】:

  • “设备内存”不应该是“设备存储”吗?
【解决方案2】:

是的,当然,如果您擦除所有应用程序数据,则就像您卸载并重新安装它一样。 SQLiteDatabasesSharedPreferences 中的所有数据都将丢失。但这在你的情况下并不重要!如果你想保存这样的静态资源,那么你想使用app resources。应用程序资源是静态的,不能在运行时擦除或更改。试试这样的:

转到项目中的文件夹 res/values 并创建一个名为 strings.xml 的文件(如果它尚不存在)。您可以在其中定义各种Strings,例如 IP 地址或端口号、登录凭据、API 密钥,就像这样:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="username">SomeUserName</string>
    <string name="password">123456</string>

<resources>

您可以像这样从代码中读取这些值:

String username = context.getString(R.string.username);
String password = context.getString(R.string.password);

【讨论】:

  • 我认为这个值是动态的,所以用户如何将它存储在字符串 .xml 中可能不是一个好的解决方案,如果我错了,请纠正我
  • @ Xaver Kapeller,实际上我正在接受用户的这个值,所以你能告诉我如何将值设置为字符串
  • 据我所知,当值从用户接受时,我们无法在 string.xml 文件中设置值,因为它们是动态的,是的,对于静态上述答案会很好
  • 是的,正如我在回答中提到的,应用程序资源中的值不能在运行时更改,它们纯粹是只读的。如果您正在处理动态值,则需要使用 SharedPreferences 或类似的东西。
【解决方案3】:

是的,在清除数据时,包括用户详细信息在内的所有应用程序数据都将被删除。如果您甚至存储在 sqlite 数据库中,也会发生这种情况... 简而言之,清除应用数据意味着应用的生命周期已经结束......从这一点开始,您的应用将作为新安装的应用开始......

如果您需要在清除应用数据时保留数据而不被破坏,则需要将数据保存在远程数据库中,并在本地不可用时进行同步...

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多