【发布时间】:2016-01-04 07:54:13
【问题描述】:
好的,在 Udacity Android 开发课程之后,我到达了希望访问保存到名为 pref_general.xml 的 sharedPreferences 文件中的邮政编码的部分,该文件以字符串类型保存邮政编码并连接到一个键通过键值对调用位置。
我解决此问题的方法是使用 getSharedPreferences() 方法按名称获取文件。虽然这似乎不会导致问题,因为文件没有变成空值,但尝试检索邮政编码导致无法通过键找到值并确定参数的给定默认值。
SharedPreferences appPreferences = getActivity().getSharedPreferences("pref_general", Context.MODE_PRIVATE);
if(appPreferences == null) {
Log.v("ERRORTAG", "Cannot get sharedPreferences file");
}
String getPostal = appPreferences.getString(getString(R.string.pref_location_key), "0");
Log.v("ERRORTAG", getPostal);
logcat 上的第二个详细语句导致默认字符串值 0,而不是与给定键 94043 邮政编码绑定的值。
现在 Udacity 给出的答案是使用 PreferenceManager,它获取与 Activity 绑定的默认单独的 sharedPreferences 文件
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
文件不为空,并且检索到的邮政编码是在 sharedPreference 文件中设置为键值对的给定默认邮政编码 94043。
我想了解为什么我的方法不起作用;它非常接近。唯一的区别是文件的访问方式。请给我一个解释为什么。谢谢。
【问题讨论】:
-
显示您在其中创建
pref_general文件并在其中存储邮政编码的代码。 -
附带说明,我希望 Udacity 没有教你将字符串常量放入
strings.xml。这适用于可本地化的 UI 字符串。 -
Udacity 告诉我们使用已弃用的方法通过 SettingsActivity 添加首选项,以针对 Gingerbread OS 设备。话虽如此,邮政编码的字符串常量实际上是通过 pref_general.xml 中的 android:defaultValue 作为 xml 属性创建的,并且它的字符串与 strings.xml 相关联,这显然是您反对的。可本地化的 UI 字符串是什么意思?
-
addPreferencesFromResource(R.xml.pref_general); bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_location_key)));
-
strings.xml用于将针对不同语言环境翻译成不同语言的字符串。有一些讨论here。
标签: android xml sharedpreferences android-sharedpreferences