如何从/向共享首选项读取/写入高分

时间:2015-07-23 04:50:44

标签: java android sharedpreferences

我正在编写游戏,需要使用SharedPrefernces记录玩家的高分和其他信息。这是我在活动A中记录高分的代码

if (score > highcore) {
    highscore = score;
    getPreferences(MODE_PRIVATE).editor().putInt("highscore", score);
}

然后,在活动B中,我阅读了高分并将其输出到TextView

textView.setText ("Highscore:" + Integer.toString(getPreferences(MODE_PRIVATE).getInt ("highscore", 0)));

但是,输出为0。 我认为这是因为对putIntgetInt的两次调用都处于不同的活动中。所以我在一个活动A的方法中加了一个断点,并使用"评估表达式"按钮来评估getPreferences(MODE_PRIVATE).getInt ("highscore", 0),但它仍然表示它是0.为什么?

我认为这与MODE_PRIVATE有关?如果我无法使用MODE_PRIVATE可以使用什么?

3 个答案:

答案 0 :(得分:1)

你忘了承诺:

    getPreferences(MODE_PRIVATE).editor().putInt("highscore", score).commit();

另外,正如文档所说的getPreferences(MODE_PRIVATE):

  

这只是通过传入此活动的类名作为首选项名称来调用底层的getSharedPreferences(String,int)方法。

所以你在活动B中阅读了另一个Prefernce文件。

而你可以使用:

  PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("highscore", score).commit();

并在活动B中阅读:

PreferenceManager.getDefaultSharedPreferences(this).getInt("highscore", score);

答案 1 :(得分:0)

您在编辑器中所做的所有更改都是已批量,在您致电SharedPreferencescommit()之前,不会将其复制回原始apply()

您可以使用:

PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("highscore", score).commit();

实际上commit()会将其首选项同步写入持久存储。

答案 2 :(得分:0)

在将数据存储到偏好设置时,您需要添加editor.commit();editor.apply();