SharedPreferences不递增整数值 - Android

时间:2013-07-29 16:39:57

标签: java android sharedpreferences

我想在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是否意味着什么?它们应该是别的吗?

3 个答案:

答案 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;