我正在编写游戏,需要使用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。
我认为这是因为对putInt
和getInt
的两次调用都处于不同的活动中。所以我在一个活动A的方法中加了一个断点,并使用"评估表达式"按钮来评估getPreferences(MODE_PRIVATE).getInt ("highscore", 0)
,但它仍然表示它是0.为什么?
我认为这与MODE_PRIVATE
有关?如果我无法使用MODE_PRIVATE
,可以使用什么?
答案 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)
您在编辑器中所做的所有更改都是已批量,在您致电SharedPreferences
或commit()
之前,不会将其复制回原始apply()
。
您可以使用:
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("highscore", score).commit();
实际上commit()
会将其首选项同步写入持久存储。
答案 2 :(得分:0)
在将数据存储到偏好设置时,您需要添加editor.commit();
或editor.apply();
。