将数组列表保存到SharedPreference/从SharedPreference检索数组列表时出现Kotlin错误“java.lang.NullPointerException:gson.fromJson(json,type)不能为空”

xoshrz7s  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(127)

我尝试在一个片段中设置将对象的arrayList保存到sharedPreferences以及从sharedPreferences中检索对象的arrayList,但我一直收到上面的错误。这是我的代码片段

fun getData() {
    val sharedPreferences = activityCast().getSharedPreferences("DATA", Context.MODE_PRIVATE)
    val gson = Gson()
    val json = sharedPreferences.getString("data", null)
    val type: Type = object : TypeToken<ArrayList<Car>>(){}.type

    carsList = gson.fromJson(json, type)

    if (carsList.isEmpty()){
        carsList = ArrayList()
    }

}

fun saveBillData(car: Car){
    val sharedPreferences = activityCast().getSharedPreferences("DATA", Context.MODE_PRIVATE)
    val editor = sharedPreferences.edit()
    val gson = Gson()

    carsList.add(car)

    val json: String = gson.toJson(carsList)

    editor.putString("data", json)

   editor.apply

}

我查找错误,发现类似问题here
我得到是将sharedPreference.getString的第二个参数从null更改为“{}”
这样做会产生错误:
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:需要开始_ARRAY,但在路径$的第1行第2列却是BEGIN_OBJECT

cpjpxq1n

cpjpxq1n1#

JSON中的开始_OBJECT为{
开始数组为[
您正在尝试解析一个列表。因此,如果您没有任何数据,您希望它返回一个空列表,即“[]"。因此,您应该使用“[]”而不是“{}”

相关问题