2010-03-16 89 views
0

我的问题如下:我有一个扩展DialogPreference的组件。如果我从UI外部更改相关联的偏好...首选项不保存在DialogPreference中

SharedPreferences.Editor ed= sharedPreferences.Edit(); 
ed.putInteger("Setting",aValue); 
ed.commit(); 

...然后,当我打开对话框时,所选首选项没有改变。即使共享首选项值被修改,它仍然包含以前设置的值。

有没有人有任何想法可能会导致此?

+0

你怎么看它? – Macarse 2010-03-16 21:09:30

+0

是这样的: int value = sharedPref.getInt(“settingKey”,-1) – 2010-03-17 05:51:30

+0

,因为你在“Setting”下保存并在“settingKey”下。需要使用相同的密钥进行保存和检索 – MobileMon 2014-05-17 17:04:20

回答

0

这可能已经早就解决了,但以防万一....

的一些想法的东西,这可能是造成问题的原因:

  • 的“SharedPreferences”你写你的价值可能不一样,你正在阅读。您可以通过从SharedPreferences获取值并在对话框中调用commit()之后立即打印它(在Log或Toast上)来测试。如果您看到修改后的变量,则实际上可能会在对话框中打开一个新的“SharedPreferences”,而不是您在呼叫活动中使用的那个,或者在对话框之后再次重写默认值。例如,IF onResume()或其他函数在关闭对话框后立即被调用,并且如果在那里写入默认值。我认为这是不太可能的,但如果你确定自己写的是正确的'SharedPreferences',可能需要考虑其他问题。

  • 您在编写变量时使用的函数可能是错误的......我不清楚这将如何被编译器检测到,否则不会失败,但正如我在SharedPreferences的文档中看到的.Editor,用于写入Integer值的函数可以是putInt(String key,int value)而不是putInteger(String key,int value)。

  • 您可能正在读取或写入错误的变量....如果您复制粘贴putInt命令并留下错误的键或错误的值,则可能发生这种情况。这是一种长期未被发现的错误,但它......我想它会发生。一个类似效果的错误是在键上有一个错字(两个不同的键用于读写)。

    没有真正的代码我认为没有更多的我可以建议...但我希望这可以以某种方式帮助任何人得到这个问题。

    问候。