获取PreferenceActivity之外的首选项

时间:2015-12-02 14:06:51

标签: android sharedpreferences preferenceactivity

我得到了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?

2 个答案:

答案 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)方法   类名作为首选项名称。

getDefaultSharedPreferences

  

获取指向默认文件的SharedPreferences实例   在给定的上下文中由首选框架使用。

因此这两个方法返回不同的首选项对象,这就是你得到默认值的原因。

getPreferences(MODE_PRIVATE)更改为PreferenceManager.getDefaultSharedPreferences()