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

Android Studio:如何实现多次测验的累计得分持久化存储

实现累计测验得分的解决方案

嗨,我来帮你搞定这个所有测验累计得分的功能!从你现有的代码来看,你已经掌握了用SharedPreferences存储数据的基本方法,现在只需要调整逻辑,实现累加而非覆盖的效果就行。

核心思路

累计得分的逻辑很简单:每次测验结束后,先从SharedPreferences里取出之前保存的累计总分,加上本次测验的得分mScore,再把新的总分存回去。如果是第一次测验,累计总分的默认值设为0就好。

完整实现代码

你可以把原来的代码替换成下面这段,我会逐行解释:

// 获取SharedPreferences实例(不用重复创建多个,一个就够)
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();

// 1. 取出当前累计得分,第一次取的话默认是0
int currentTotalScore = preferences.getInt("totalScore", 0);

// 2. 计算新的累计得分:原有总分 + 本次得分
int newTotalScore = currentTotalScore + mScore;

// 3. 把新的累计得分存回SharedPreferences
editor.putInt("totalScore", newTotalScore);

// 4. 提交修改:推荐用apply()(异步,不阻塞UI),commit()是同步的
editor.apply();

// 如果你还需要保存单次高分,继续保留原来的逻辑就行
int currentHighScore = preferences.getInt("myHighScore", 0);
if (mScore > currentHighScore) {
    editor.putInt("myHighScore", mScore);
    editor.apply();
}

关键细节说明

  • 避免重复创建SharedPreferences实例:你原来的代码里创建了preferences和preferences2,其实完全没必要,一个实例就能处理所有键值对的读写。
  • 默认值的设置:getInt("totalScore", 0)里的第二个参数0就是默认值,第一次打开应用时没有累计得分,就会用这个值。
  • apply() vs commit():apply()是异步提交,不会阻塞主线程,更适合在UI操作中使用;commit()是同步的,会返回布尔值表示是否成功,但一般场景下用apply()就足够了。
  • 键名统一:用totalScore作为累计得分的键,和你原来的myHighScore区分开,避免混淆。

读取累计得分的方法

如果之后需要在其他页面展示累计得分,只需要这样读取:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
int totalScore = preferences.getInt("totalScore", 0);
// 然后把totalScore展示到TextView等控件上

这样就能完美实现所有测验得分的累计保存啦!

内容的提问来源于stack exchange,提问作者user9739950

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:54