使用SharedPreferences存取字符串集合时抛出类型转换异常
错误信息
调用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
相关产品推荐
相关产品推荐

