2013-06-20 58 views
4

我遇到了问题SharedPreferences如果我想保存两个不同的值。我试着用这段代码:SharedPreferences覆盖其他值

SharedPreferences sharedPref = getSherlockActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 

editor.putInt(getString(R.string.SavedStartSilentHour), hour); 
editor.commit(); 

editor.putInt(getString(R.string.SavedStartSilentMinute), min); 
editor.commit(); 

// One editor.commit() is enough 

如果我运行这段代码,第一个值会被第二个值覆盖。如果我删除了第二部分,则值被正确保存。这是为什么?

+0

发表您的'<字符串名称= “SavedStartSilentHour”>'被定义XML文件。 –

+0

这就是谢谢你!有时你因为那么多树而看不到森林......谢谢。 – Cilenco

+1

@ user2246674我想这将是一个很好的发表您的评论作为答案。 –

回答

3

您的代码看起来很完美!

您可以通过在所有“放置”操作之后提交所有内容来简化操作。虽然我不认为这可能是你的问题...

只要确保SavedStartSilentHourSavedStartSilentMinutes xml的定义值是正确定义的,即如果他们是相同的,当然他们将被覆盖。 (这是唯一考虑到你的代码对我有意义的事情)。你的进步

让巢知道;)

+1

这就是它,谢谢你!有时你看不到森林,因为有那么多的树......我有' 0 0'我改变了里面的值,现在它完美的工作。谢谢。 – Cilenco

0

删除第一次调用

editor.commit(); 

,你会被罚款。

+0

我不确定*为什么*这会使“第一个值[..]被第二个值覆盖”。 – user2246674

+0

不起作用... – Cilenco

0

该问题最有可能是由于重新使用密钥导致第二个赋值重写相同键值。检验这一假设

的一种方式是使用简单的按键,消除这种可能性,例如:

editor.putInt("hour", hour); 
editor.putInt("min", min); 

或者,调试器可以附接和getString(keyId)结果可以进行比较,以尝试。

如果这确实“修复”的问题,然后确保SavedStartSilentHourSavedStartSilentMinute资源实际评估为不同字符串 - 检查资源文件本身。