Android studio Gson()出现错误。fromJson-“;调用public com.keikakupet.PetStatus()失败,没有参数;

Android studio Gson()出现错误。fromJson-“;调用public com.keikakupet.PetStatus()失败,没有参数;,android-studio,kotlin,gson,Android Studio,Kotlin,Gson,我试图使用Gson库将Kotlin类的一个实例存储到JSON文件中。但是,当我运行Gson().fromJson时,我收到以下错误: java.lang.RuntimeException:调用public com.keikakupet.PetStatus()失败,没有参数 我对这个错误的理解是,Gson要求我的类有一个不带参数的主构造函数,这样它就可以构造所需的对象(在本例中是一个PetStatus对象)。然而,我有这样一个构造函数。我不确定问题的一部分是否在于我从init运行该方法。有人知道我

我试图使用Gson库将Kotlin类的一个实例存储到JSON文件中。但是,当我运行Gson().fromJson时,我收到以下错误:

java.lang.RuntimeException:调用public com.keikakupet.PetStatus()失败,没有参数

我对这个错误的理解是,Gson要求我的类有一个不带参数的主构造函数,这样它就可以构造所需的对象(在本例中是一个PetStatus对象)。然而,我有这样一个构造函数。我不确定问题的一部分是否在于我从init运行该方法。有人知道我如何修复这个错误吗

我的代码:

package com.keikakupet
导入android.content.Context
导入android.util.Log
导入com.google.gson.gson
导入java.io.xml文件
导入java.util*
导入java.io.BufferedReader
类状态构造函数(){
var maxHealth:Int=10
var currentHealth:Int=10
var healthcincrementer:Int=2//任务完成时健康增加的数量
var healthDecrementer:Int=0//当用户接近/错过截止日期时,运行状况的递减量
var-isHungry:Boolean=false
变量isTired:Boolean=false
var isSick:Boolean=false
var-isAlive:Boolean=true
初始化{
//如果存在json,则使用它来更新PetStatus
val context=getContext()
var file=file(context.getFilesDir(),“PetStatus.json”)
if(file.exists()){
Log.d(“文件存在”,“文件存在!”)
val bufferedReader:bufferedReader=file.bufferedReader()
val json=bufferedReader.readText()
val retrievedStatus=Gson().fromJson(json,PetStatus::class.java)
Log.d(“JSON_检索”,JSON)
}
其他的
Log.d(“文件”“文件不存在!”)
updateJson()
}
//完成任务后更新宠物健康和疾病的方法
有趣的processCompletedTask(){
增量健康()
搬迁
Log.d(“任务完成”,“已完成的任务已处理”)
}
乐趣getHealthPercent():Int{
返回currentHealth/maxHealth
}
//方法在错过任务时更新宠物的健康和疾病
趣味流程missedtask(){
递减
增补
Log.d(“未完成任务”、“已处理未完成任务”)
}
/*
可能会创建另一种方法来更新宠物的
健康和状态,因为截止日期即将到来。
*/
//降低宠物健康的方法
私人娱乐减量{
currentHealth-=healthDecrementer

如果(currentHealth由于构造函数没有参数,Gson无法借助json实例化类

按如下方式重新构造类:

类状态私有构造函数(
变量maxHealth:Int=10,
var currentHealth:Int=10,
var healthcincrementer:Int=2,//任务完成时健康增量的数量
var healthdirementer:Int=0,//当用户接近/错过截止日期时,运行状况减少的量
变量isHungry:Boolean=false,
变量isTired:Boolean=false,
var isSick:Boolean=false,
var isAlive:Boolean=true){
/**
*这是可选的修复,因为它是一个设计指南
*建议,您也可以保留原来的功能
*乐趣getHealthPercent():Int{
*返回currentHealth/maxHealth
* }
*/
val健康百分比:Int
get()=currentHealth/maxHealth
...
伴星{
lateinit var context:context//java的getter和setter是自动生成的
运算符fun invoke():PetStatus{
//如果存在json,则使用它来更新PetStatus
val context=context
var file=file(context.getFilesDir(),“PetStatus.json”)
if(file.exists()){
Log.d(“文件存在”,“文件存在!”)
val bufferedReader:bufferedReader=file.bufferedReader()
val json=bufferedReader.readText()
val retrievedStatus=Gson().fromJson(json,PetStatus::class.java)
Log.d(“JSON_检索”,JSON)
返回检索状态
}否则{
Log.d(“文件”“文件不存在!”)
返回状态()
}
updateJson()
}
运算符fun invoke(maxHealth:Int、currentHealth:Int、healthIncrementer:Int、healthDecrementer:Int、isHungry:Boolean、isTired:Boolean、isSick:Boolean、isAlive:Boolean):PetStatus
=PetStatus(maxHealth、currentHealth、healthIncrementer、healthDecrementer、isHungry、isTired、isSick、isAlive)
}
}
现在你可以同样地调用这个类

PetStatus()

operator fun invoke()
是一种黑客(ish)方法,我建议您实际将代码取出并从外部实例化类。

由于您的构造函数没有参数,Gson无法借助json实例化您的类

按如下方式重新构造类:

类状态私有构造函数(
变量maxHealth:Int=10,
var currentHealth:Int=10,
var healthcincrementer:Int=2,//任务完成时健康增量的数量
var healthdirementer:Int=0,//当用户接近/错过截止日期时,运行状况减少的量
变量isHungry:Boolean=false,
变量isTired:Boolean=false,
var isSick:Boolean=false,
var isAlive:Boolean=true){
/**
*这是可选的修复,因为它是一个设计指南
*建议,您也可以保留原来的功能
*乐趣getHealthPercent():Int{
*返回currentHealth/maxHealth
* }
*/
val健康百分比:Int
get()=当前