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
相关产品推荐
相关产品推荐

