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

使用SharedPreferences时遭遇java.lang.ClassCastException问题求助

解决SharedPreferences getInt()抛出ClassCastException的问题

嘿,我来帮你搞定这个头疼的类型转换异常!你遇到的问题其实很典型——明明用putInt存了整数,用getInt取的时候却报ClassCastException,核心原因只有一个:numberOne这个key对应的存储数据类型根本不是int。

可能的原因

  • 你之前的代码(或者测试阶段)不小心用了其他存储方法处理过这个key,比如误写了putString("numberOne", ...)、putLong("numberOne", ...),SharedPreferences会永久保留每个key的初始存储类型,哪怕你后来改成putInt也覆盖不了旧的类型数据。
  • 如果你的App是多进程架构,MODE_PRIVATE的SharedPreferences可能出现数据同步问题,导致读取到的类型和存储的不一致。

解决步骤

  1. 排查所有代码中的key操作
    全局搜索numberOne这个key,确认所有对它的存储操作都是putInt,没有混用其他putXxx方法。

  2. 清除旧的错误类型数据
    可以在存储前先删除这个key,再重新存储:

    mySharedPref = getSharedPreferences("MyPref", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = mySharedPref.edit();
    // 先移除旧的错误类型数据
    editor.remove("numberOne");
    // 再存入正确的int值
    editor.putInt("numberOne", myInteger);
    // 提交修改
    editor.apply();
    
  3. 快速测试方案
    如果是测试环境的遗留数据,直接卸载App重新安装,这样SharedPreferences的存储文件会被完全清空,旧的错误数据就消失了。

  4. 多进程场景处理
    如果你是在多进程中使用SharedPreferences,建议采用ContentProvider或者其他跨进程存储方案(MODE_MULTI_PROCESS在API 23后已废弃),同时确保所有进程对这个key的操作都是统一的类型。

注意事项

SharedPreferences的每个key对应唯一的数据类型,存储和读取必须严格匹配:存int就用putInt,取就用getInt;存String就用putString和getString,混着用必然会抛出类型转换异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:31:09