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

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)
        // 其他进度数据展示逻辑
    }
}

验证步骤

  1. 故意答错3道题,完成测验后调用getProgress()并打印日志,确认totalWrongAnswers为3
  2. 重启应用,检查进度是否保留,错误计数是否依然准确
  3. 混合正确/错误答题,验证总答题数、正确数、错误数的总和是否匹配

内容的提问来源于stack exchange,提问作者ijs-kyle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:57:49