我对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 :(得分:3)
您的代码看起来很完美!
你可以通过在所有" put"之后提交所有内容来简化事情。操作。虽然我不认为这可能是你的问题......
只需确保SavedStartSilentHour
和SavedStartSilentMinutes
xml定义的值已正确定义,即如果它们相同,当然它们将被覆盖。 (这是我考虑你的代码时唯一有意义的事情。)
让我们知道你的进步;)
答案 1 :(得分:0)
删除第一次调用
editor.commit();
你会没事的。
答案 2 :(得分:0)
问题很可能是由于重新使用密钥导致第二次分配只是覆盖相同键值。
测试这一假设的一种方法是尝试使用消除这种可能性的简单密钥,例如:
editor.putInt("hour", hour);
editor.putInt("min", min);
或者,可以附加调试器,并且可以比较getString(keyId)
的结果。
如果这确实“修复”了该问题,请确保SavedStartSilentHour
和SavedStartSilentMinute
资源实际评估为不同的字符串 - 检查资源文件本身。