You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android游戏SharedPreferences加载的分数无法即时显示问题求助

Android游戏分数保存后重启不显示的修复方案

问题根源

你遇到的问题核心是读取保存的分数后没有主动更新UI显示,同时代码里存在冗余的SharedPreferences操作:

  1. 重启应用后,虽然已经从SharedPreferences读取了正确的分数,但UI控件仍停留在初始值(比如0),只有当分数再次变更时才会刷新UI,导致显示的是“初始值+新增分数”而非“保存的分数+新增分数”。
  2. 保存分数时同时调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:47:36