SharedPreferences会覆盖其他值

时间:2013-06-20 22:40:45

标签: android android-preferences

我对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

如果我运行此代码,第一个值将被秒值覆盖。如果我删除第二部分,则正确保存值。那是为什么?

3 个答案:

答案 0 :(得分:3)

您的代码看起来很完美!

你可以通过在所有" put"之后提交所有内容来简化事情。操作。虽然我不认为这可能是你的问题......

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

让我们知道你的进步;)

答案 1 :(得分:0)

删除第一次调用

editor.commit();

你会没事的。

答案 2 :(得分:0)

问题很可能是由于重新使用密钥导致第二次分配只是覆盖相同键值。

测试这一假设的一种方法是尝试使用消除这种可能性的简单密钥,例如:

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

或者,可以附加调试器,并且可以比较getString(keyId)的结果。

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