【问题标题】:Where are default shared preferences written to?默认共享首选项写入哪里?
【发布时间】:2019-05-11 23:47:41
【问题描述】:

我正在尝试在第一次运行我的应用程序时初始化默认共享首选项。我发现根据我的操作方式,Android文件系统上的共享首选项文件存在差异。

如果我使用以下代码专门写入共享首选项,则 XML 文件位于 /data/data/myapp/shared_prefs/ 中:

SharedPreferences.Editor editor = pref.edit();
if ((myKey = pref.getString("key", null)) == null) {
  myKey = "default value";
  editor.putString("key", myKey );
  editor.commit();
}

但是,如果我使用下面的单行来初始化默认值,我在 /data/data/myapp/shared_prefs/ 中看不到 XML 文件:

myKey = pref.getString("key", "default value");

在后一种情况下,XML 文件存储在哪里,为什么会有不同的行为?

【问题讨论】:

  • 在后一种情况下,没有写入任何内容。除非您之前曾向同一个 SharedPreferences 写过一些东西,否则您不应该期望在那里看到文件。

标签: android sharedpreferences default-value


【解决方案1】:

我先解决你的第二种情况:

myKey = pref.getString("key", "default value");

您在这里所说的是“获取与"key" 关联的值,如果没有,则获取"default value"”。这纯粹是一个读取操作。当您从此方法返回 "default value" 时,系统实际上并没有“初始化”您的共享首选项存储,它只是说“没有找到 "key" 的任何内容,所以这是您所说的其他内容”。

接下来,你的第一个案例:

SharedPreferences.Editor editor = pref.edit();
if ((myKey = pref.getString("key", null)) == null) {
    myKey = "default value";
    editor.putString("key", myKey );
    editor.commit();
}

在这里,您对getString() 执行与上述相同的操作,但这次您检查其返回值,然后执行write 操作。 if 块的主体是创建文件的内容。

【讨论】:

  • 谢谢。我的印象是,除了返回默认值之外,第二种情况还会创建一个具有默认值的共享首选项。显然我错了。我猜第一种情况是在共享首选项中设置默认值的方法,除非有办法将 XML 文件直接包含到 Android Studio 项目中?
猜你喜欢
  • 2011-09-03
  • 2013-07-19
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
相关资源
最近更新 更多