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

使用SharedPreferences存取字符串集合时抛出类型转换异常

解决SharedPreferences getStringSet()类型转换错误

错误信息

调用getStringSet()时抛出异常:

java.lang.String cannot be cast to java.util.Set

问题根源

同一个key对应的存储值类型不匹配——你当前尝试获取Set<String>,但该key之前被存储过String类型的数据,导致SharedPreferences内部存储的类型和你期望的类型冲突。

解决方案

  • 检查key的使用:确认目标key没有在代码其他地方被调用putString()存储字符串,避免不同逻辑误用同一个key存不同类型数据。
  • 清理旧数据:
    测试阶段可直接卸载重装app清除所有SharedPreferences数据;
    或通过代码先删除该key的旧值再重新存储:
    // 移除旧的错误类型数据
    editor.remove("你的目标key").apply()
    // 重新存储StringSet
    setStringSet("你的目标key", 你的集合数据)
    
  • 验证存储调用:检查调用setStringSet()时传入的第二个参数确实是Set<String>类型,没有误传成单个字符串。

额外注意

SharedPreferences的getStringSet()返回的是不可修改的集合,如果需要修改返回的集合,必须先拷贝到新的集合对象中再操作,示例:

val originalSet = getStringSet("key", null)
val mutableSet = originalSet?.toMutableSet() ?: mutableSetOf()
// 对mutableSet进行修改操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:25:37