5

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

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

4

3 回答 3

3

你的代码看起来很完美!

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

只需确保正确定义SavedStartSilentHourSavedStartSilentMinutesxml 的定义值,即,如果它们相同,它们当然会被覆盖。(考虑到您的代码,这对我来说是唯一有意义的一件事)。

让喵喵知道你的进步;)

于 2013-06-20T23:01:47.093 回答
0

删除第一个调用

editor.commit();

你会没事的。

于 2013-06-20T22:44:04.500 回答
0

该问题很可能是由于重复使用密钥导致第二次分配简单地覆盖了相同的键值。

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

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

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

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

于 2013-06-20T23:01:22.657 回答