0

我想将 int 存储在SharedPreferences. 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。这告诉我,我存储的 intSharedPreferences没有递增。

我的问题是,我“得到”SharedPreferences正确吗?如果是,我SharedPreferences是否正确“编辑”?如果不是任何一个,我做错了什么?

编辑

思想:0分散在我上面的代码中是否意味着什么?他们应该是别的东西吗?

4

3 回答 3

3

利用

editor.putInt("currentLevel", newLevel);

反而。

当您获得新级别时,您将其写入与阅读时不同的偏好。

于 2013-07-29T16:41:53.700 回答
2

看起来你想改变这个

editor.putInt("newLevel", newLevel);

editor.putInt("currentLevel", newLevel);

您正在创建一个新的SharedPreference而不是编辑现有的,因此currentLevel永远不会从 1 更改

于 2013-07-29T16:42:12.243 回答
0

这条线是问题所在:

int newLevel = level++;

您正在使用后增量运算符,这意味着这与以下内容相同:

int newLevel = level;
level = level + 1;

尝试

int newLevel = level + 1;
于 2016-03-14T10:49:13.860 回答