没问题,在Udacity Android Development Course之后,我到达了我希望访问保存到名为pref_general.xml的sharedPreferences文件的邮政编码的部分,邮政编码保存为字符串类型,并通过键值对连接到称为位置的键。Android:PreferenceManager vs Context.getSharedPreferences()以及为什么后者让我失败
我对问题的解决方法是使用getSharedPreferences()方法按名称获取文件。虽然这看起来不会导致问题,因为该文件没有结果为null,但是检索邮政编码的尝试导致无法通过该键找到该值,并确定了该参数的给定默认值。
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,它抓住默认孤独sharedPreferences文件捆绑到活动
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
该文件不为空,并将检索邮政编码是违约邮政编码94043在sharedPreference文件中设置为键值对。
我想了解为什么我的方法无法正常工作;它非常接近。唯一的区别是文件被访问的方式。请给我一个解释,为什么。谢谢。
显示您创建'pref_general'文件的代码并将邮政编码存储在其中。 –
在附注中,我希望Udacity不会教你将字符串常量放入'strings.xml'中。这是可本地化的UI字符串。 –
Udacity告诉我们使用已弃用的方法来通过SettingsActivity添加首选项,以便定位Gingerbread操作系统设备。也就是说,邮政编码的字符串常量实际上是通过pref_general.xml中的android:defaultValue创建的xml属性,并且它的字符串绑定到strings.xml显然是您所反对的。本地化的UI字符串是什么意思? – kthieu