Android游戏SharedPreferences加载的分数无法即时显示问题求助
Android游戏分数保存后重启不显示的修复方案
问题根源
你遇到的问题核心是读取保存的分数后没有主动更新UI显示,同时代码里存在冗余的SharedPreferences操作:
- 重启应用后,虽然已经从SharedPreferences读取了正确的分数,但UI控件仍停留在初始值(比如0),只有当分数再次变更时才会刷新UI,导致显示的是“初始值+新增分数”而非“保存的分数+新增分数”。
- 保存分数时同时调用
apply()和commit()属于冗余操作,两者功能重叠,只需保留其一。
修复步骤及代码示例
1. 修正初始化逻辑,读取分数后立即更新UI
确保在初始化UI控件之后读取保存的分数,并同步更新显示:
public static final String PREFS_NAME = "MyPrefsFile"; int score = 0; TextView scoreTextView; // 显示分数的TextView @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_game_layout); // 先初始化UI控件 scoreTextView = findViewById(R.id.score_text_view); // 读取保存的分数(默认值设为0更清晰) SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); score = settings.getInt("score", 0); // 读取后立即更新UI,让保存的分数显示出来 scoreTextView.setText(String.valueOf(score)); }
2. 简化分数保存逻辑
去掉重复的apply()和commit(),二选一即可:
// 在提交事件监听中,先计算新增分数 score += 10; // 先更新UI,再保存 scoreTextView.setText(String.valueOf(score)); // 保存分数到SharedPreferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putInt("score", score); editor.apply(); // 异步写入,适合大多数场景;如果需要确保立即写入磁盘,改用editor.commit()
额外说明
MODE_PRIVATE是SharedPreferences的标准模式,确保只有你的应用能访问该文件,比直接传0更规范。- 始终遵循“先更新UI,再保存数据”或“读取数据后立即更新UI”的逻辑,避免数据与UI不同步的问题。
内容的提问来源于stack exchange,提问作者Hi there
相关产品推荐
相关产品推荐

