我想在SharedPreferences
中存储一个int。 int表示用户在我的游戏中所处的级别。在游戏开始之前,执行此代码:
int level;
// Restore preferences
SharedPreferences settings = getSharedPreferences("level_SP", 0);
level = settings.getInt("currentLevel", 0);
if(level == 0) {
level++;
}
String str = Integer.toString(level);
title.setText(str);
title.setText(str);
输出的文字为1
。
出于测试目的,无论用户如何在游戏中通过关卡。游戏结束后,执行此代码。
public void levels() {
// do calculations here to see if user passed level.
// Restore preferences
SharedPreferences settings = getSharedPreferences("level_SP", 0);
int level = settings.getInt("currentLevel", 0);
int newLevel = level++;
// We need an Editor object to make preference changes.
SharedPreferences.Editor editor = settings.edit();
editor.putInt("currentLevel", newLevel);
// Commit the edits!
editor.commit();
}
然后,当用户再次启动游戏时,他们应该处于第2级。在此帖子顶部粘贴的代码中,这行代码:title.setText(str);
应输出2
,但它仍在说1
。这告诉我存储在SharedPreferences
中的int没有递增。
我的问题是,我正确地“获得”了SharedPreferences
吗?如果是,我是否正确“编辑”了SharedPreferences
?如果不是任何一个,我做错了什么?
修改
思想:分散在我上面代码中的0
是否意味着什么?它们应该是别的吗?
答案 0 :(得分:3)
使用
editor.putInt("currentLevel", newLevel);
代替。
当你获得新的等级时,你将其写入与你阅读时不同的偏好。
答案 1 :(得分:2)
看起来你想改变这个
editor.putInt("newLevel", newLevel);
到
editor.putInt("currentLevel", newLevel);
您正在创建新的SharedPreference
而不是编辑现有内容,因此currentLevel
永远不会从1更改
答案 2 :(得分:0)
这一行是问题所在:
int newLevel = level++;
您正在使用后增量运算符,这意味着它与:
相同int newLevel = level;
level = level + 1;
试
int newLevel = level + 1;