用kotlin写Gson解析遇到failed to invoke 问题

来源:互联网 发布:电脑网络受限制怎么办 编辑:程序博客网 时间:2024/06/01 10:10

       这段时间一直用kotlin再写项目,对于语法不是很熟悉总是遇到一些问题不知如何解决,网上的资料也不多,只能摸索着解决。本篇文章只为记录错误防止以后再犯。

问题描述:

自定义一个类LifecycleJson

class LifecycleJson() {    var lifecycle: ArrayList<LifecycleInfo> = null!!    var link: ArrayList<LinkInfo> = null !!    var state: ArrayList<StateInfo> = null!!  }
在项目中有一段Gson解析的代码

fun parseData(result: String): LifecycleJson {        val gson = Gson()        val lifecycleJsonInfo = gson.fromJson<LifecycleJson>(result, LifecycleJson::class.java)        return lifecycleJsonInfo    }
每次运行到Gson解析的时候都会遇到Failed to invoke 包名.LifecycleJson with no args

错误信息很简单就是Gson在把json映射成LifecycleJson对象时不能调用没有参数的构造。

思考:

       在java语言中每个对象都会默认生成一个没有参数的构造器,为什么会不能调用呢?第一直觉就是自己写了一个没有参数的构造函数,然而仍旧报相同的错误。

问题搁置了几天,有一天我单步调试发现返回的字符串某些属性是为空的,在kotlin中定义属性的时候都要明确是否可以为空,比如LifecycleJson中的3个属性我写的都不能为空。因此对LifecycleJson进行修改如下:

class LifecycleJson() {    var lifecycle: ArrayList<LifecycleInfo> ?= null    var link: ArrayList<LinkInfo> ?= null    var state: ArrayList<StateInfo> ?= null}
再运行,没有报错,结果正确解析。




原创粉丝点击