为什么HashSet无法转换为java.lang.String发生在将数组列表保存到Android的SharedPreferences中?

时间:2019-05-23 02:35:13

标签: android sharedpreferences

我尝试使用以下代码来设置ArrayList与SharedPreferences之间的距离。但是当我致电getSharedPreferencesMutableList时,会显示以下错误:

Caused by java.lang.ClassCastException
java.util.HashSet cannot be cast to java.lang.String
com.bbin.authenticator.Support.sharedPreference.SharedPreferenceHelper.getSharedPreferencesMutableList

代码如下:

fun setSharedPreferencesMutableList(context: Context, setName: String, value: ArrayList<String>) {
    var gson = Gson()
    var json = gson.toJson(value)

    val setting = context.getSharedPreferences(UBAuth, Context.MODE_PRIVATE)
    setting.edit().putString(setName, json).apply()

}

fun getSharedPreferencesMutableList(context: Context, getName: String): ArrayList<String> {
    val setting = context.getSharedPreferences(UBAuth, Context.MODE_PRIVATE)
    var json = setting.getString(getName,"")
    var type = object : TypeToken<List<String>>() {}.type
    var list = Gson().fromJson<ArrayList<String>>(json, type)

    if(list != null){
        return list
    }else{
        return ArrayList<String>()
    }
}

我没有为调用SharedPreferences设置任何setSharedPreferencesMutableList的内容。因此该值为空。

为什么显示此错误? 我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

原因是您的共享首选项的键不是字符串。

documentation说在这种情况下抛出了ClassCastException