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

SharedPreferences存储Boolean值始终返回false问题求助

问题排查与解决方案

以下是针对你遇到的sudahBelajar值始终为false问题的具体排查方向和修复方案:

  • Editor实例引用有效性问题
    你当前在onCreate中提前初始化SharedPreferences.Editor,并在点击事件的匿名内部类中引用。若Activity因配置变化(如屏幕旋转)重建,旧实例的Editor可能无法正确写入数据。建议在点击事件内部动态获取Editor:

    bttnBelajar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            bttnBelajar.setVisibility(View.GONE);
            Fragment fragment = new materisatuFragment();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.materiSatu, fragment).commit();
    
            // 点击时重新获取SharedPreferences和Editor
            SharedPreferences sharedPreferences = getSharedPreferences("PREFERENSI_APP", MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean("sudah_belajar", true);
            editor.apply();
        }
    });
    
  • 异步保存延迟问题
    apply()是异步写入磁盘的操作,如果用户点击学习按钮后立刻触发测验,可能保存还未完成,导致读取旧值。可改用同步的commit()(小数据量下对主线程影响可忽略),并检查保存结果:

    editor.putBoolean("sudah_belajar", true);
    boolean saveSuccess = editor.commit();
    // 可通过日志查看是否保存成功
    Log.d("SaveStatus", "保存结果:" + saveSuccess);
    
  • 验证代码执行流程
    添加日志确认保存和读取逻辑是否正常执行:
    保存时:

    Log.d("MateriSatu", "开始设置sudah_belajar为true");
    editor.putBoolean("sudah_belajar", true);
    editor.apply();
    Log.d("MateriSatu", "保存操作已执行");
    

    读取时:

    boolean sudahBelajar = prefs.getBoolean("sudah_belajar", false);
    Log.d("QuizStart", "读取到sudahBelajar值:" + sudahBelajar);
    

    通过日志可以确认数值是否被正确保存和读取。

  • 排查数据重置逻辑
    检查应用其他代码中是否存在修改sudah_belajar为false的逻辑,比如测验结束后的状态重置、应用启动时的初始化操作等。

  • 多进程场景问题
    若应用使用多进程(如后台Service在独立进程),MODE_PRIVATE无法保证数据跨进程同步。此时建议改用Jetpack DataStore替代SharedPreferences,或使用ContentProvider实现跨进程数据访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:34:59