Android Kotlin Quiz进度更新异常:错误答案计数始终为0
Android Quiz应用saveProgress函数错误答案计数不更新问题排查与修复方案
核心排查方向
先从以下关键点逐一定位问题:
- 错误判断逻辑:确认用户答题结果的判断条件是否准确,是否将答错的情况正确标记并传递给
saveProgress函数 - 存储字段更新:检查
saveProgress中对totalWrongAnswers的递增逻辑是否存在遗漏,比如是否仅处理了正确答案的计数分支,忽略了错误场景 - 数据加载一致性:验证进度读取时,是否正确从存储介质(SharedPreferences/Room等)中读取
totalWrongAnswers的值,而非默认返回0 - 异步操作冲突:如果使用异步存储,确认是否存在多线程写入导致的数据覆盖问题
修复后的代码示例
1. 修正QuizProgressStorage中的saveProgress函数
以SharedPreferences存储为例,确保同时处理正确/错误答案的计数逻辑:
class QuizProgressStorage(private val context: Context) { private val prefs = context.getSharedPreferences("QuizProgress", Context.MODE_PRIVATE) fun saveProgress(isAnswerCorrect: Boolean) { prefs.edit().apply { // 总答题数递增 val totalQuestions = prefs.getInt("totalQuestions", 0) + 1 putInt("totalQuestions", totalQuestions) // 分分支处理正确/错误计数 if (isAnswerCorrect) { val totalCorrect = prefs.getInt("totalCorrectAnswers", 0) + 1 putInt("totalCorrectAnswers", totalCorrect) } else { val totalWrong = prefs.getInt("totalWrongAnswers", 0) + 1 putInt("totalWrongAnswers", totalWrong) } apply() // 异步提交,需同步操作可改用commit() } } // 统一读取进度的方法,确保错误计数正确加载 fun getProgress(): QuizProgress { return QuizProgress( totalQuestions = prefs.getInt("totalQuestions", 0), totalCorrectAnswers = prefs.getInt("totalCorrectAnswers", 0), totalWrongAnswers = prefs.getInt("totalWrongAnswers", 0) ) } } // 用数据类封装进度数据 data class QuizProgress( val totalQuestions: Int, val totalCorrectAnswers: Int, val totalWrongAnswers: Int )
2. 确保QuizFragment中正确传递答题结果
在用户提交答案后,准确判断结果并调用存储函数:
class QuizFragment : Fragment() { private lateinit var progressStorage: QuizProgressStorage override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { progressStorage = QuizProgressStorage(requireContext()) // 其他初始化逻辑 return inflater.inflate(R.layout.fragment_quiz, container, false) } private fun onAnswerSubmitted(selectedAnswer: String, correctAnswer: String) { val isCorrect = selectedAnswer == correctAnswer // 传递正确的答题结果给存储函数 progressStorage.saveProgress(isCorrect) // 后续UI跳转或结果提示逻辑 } }
3. 修正QuizProgressFragment的进度展示逻辑
确保读取进度后正确渲染错误计数:
class QuizProgressFragment : Fragment() { private lateinit var progressStorage: QuizProgressStorage override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) progressStorage = QuizProgressStorage(requireContext()) updateProgressUI() } private fun updateProgressUI() { val progress = progressStorage.getProgress() // 更新错误答案数的TextView tvWrongAnswers.text = getString(R.string.total_wrong, progress.totalWrongAnswers) // 其他进度数据展示逻辑 } }
验证步骤
- 故意答错3道题,完成测验后调用
getProgress()并打印日志,确认totalWrongAnswers为3 - 重启应用,检查进度是否保留,错误计数是否依然准确
- 混合正确/错误答题,验证总答题数、正确数、错误数的总和是否匹配
内容的提问来源于stack exchange,提问作者ijs-kyle
相关产品推荐
相关产品推荐

