我得到了PreferenceActivity
。当用户更改首选项时,我想保存一些其他首选项,以便在OnPreferencesChange
方法中,我得到类似的内容:
if(p.getKey().equals("mykey")) //there is no issue with this if. it enters and get inside to the commit command
{
getPreferences(MODE_PRIVATE).edit().putString("otherKey","value").commit();
return true;
}
我还有一个服务(当然是与PreferenceActivity不同的类),我想在其中阅读首选项。所以我正在做这样的事情:
sp = PreferenceManager.getDefaultSharedPreferences();
String val1 = dsp.getString("myKey","default1");
String val2 = dsp.getString("otherKey","default2");
我得到“mykey”的正确值,但“otherKey”总是得到“default2”。这是为什么?可能是服务得到了错误的SharedPreference?
答案 0 :(得分:1)
而不是
getPreferences(MODE_PRIVATE).edit().putString("otherKey","value").commit();
做的:
PreferenceManager.getDefaultSharedPreferences( this ).edit().putString("otherKey","value").commit();
getPreferences()
返回一个" SharedPreferences对象,用于访问此活动专用的首选项",根据文档。
答案 1 :(得分:0)
正如文档所说getPreferences:
检索SharedPreferences对象以访问其中的首选项 私人参加此活动。这只是调用底层证券 通过传入此活动的getSharedPreferences(String,int)方法 类名作为首选项名称。
获取指向默认文件的SharedPreferences实例 在给定的上下文中由首选框架使用。
因此这两个方法返回不同的首选项对象,这就是你得到默认值的原因。
将getPreferences(MODE_PRIVATE)
更改为PreferenceManager.getDefaultSharedPreferences()
。