一句话说明
当 kotlin data class 和 gson 配合数据解析,val 字段会因为 json 数据中没有值而报空指针异常。
解决办法:
- 给定一个默认值,比如 “”。
- 或将字段类型改为 var,并且指定为可空类型。(当然,你就需要进行空判断了呀。)
- 改用 Moshi 框架。
如果你想知道为什么,我记得鸿洋写过一篇文章。
我给你找找…
啊
找到了,点这里。
Android避坑指南,Gson与Kotlin碰撞出一个不安全的操作
详细说明
没时间的,可以不往下看。
当你的数据格式是这样的。
{"data": [{"id": "00000000000000000000000000000000","name": "Default Department","parentId": null,"nodeType": "1"},{"id": "ee7d951aeb98412aa4a421b2f3f16714","name": "test1","parentId": "00000000000000000000000000000000","nodeType": "1"},{"id": "4d660402f2c847abae12c015cd2ecf0c","name": "test2","parentId": "00000000000000000000000000000000","nodeType": "1"},{"id": "97150ce7a292449a8cacae413e3b68ca","name": "123","parentId": "00000000000000000000000000000000","nodeType": "1"},{"id": "11111111111111111111111111111111","name": "admin","parentId": "00000000000000000000000000000000","nodeType": "2"},{"id": "878a10e874d14fd9a15b18f4081c1ed8","name": "TEST","parentId": "4d660402f2c847abae12c015cd2ecf0c","nodeType": "2"},{"id": "455d521c7e194f9fb414d9ff42d8e09e","name": "wb","parentId": "ee7d951aeb98412aa4a421b2f3f16714","nodeType": "2"},{"id": "e9d1aae801164587978c3a9f17301549","name": "WZY","parentId": "4d660402f2c847abae12c015cd2ecf0c","nodeType": "2"},{"id": "25c58da4ad634130abee0366c14969d1","name": "zj","parentId": "00000000000000000000000000000000","nodeType": "2"},{"id": "24d6c7d98dbd49e69fa07f0e08cade54","name": "ZJB","parentId": "00000000000000000000000000000000","nodeType": "2"},{"id": "54074775f5604408af1eb85fe88760b5","name": "zs","parentId": "ee7d951aeb98412aa4a421b2f3f16714","nodeType": "2"},{"id": "bd4bd6a8ba634ac8b1ed6cbbf7343fc8","name": "zyb","parentId": "4d660402f2c847abae12c015cd2ecf0c","nodeType": "2"}]}
你就改成这样的 data class
data class RxResponseCandidates(val id: String, val name: String, var parentId: String?, val nodeType: String){
fun isDept(): Boolean{
// 1: 部门 2:员工
return nodeType == "1"
}
fun isStaff(): Boolean{
// 1: 部门 2:员工
return nodeType == "2"
}
/// 是否没有父节点(是否是一级部门)
fun hasNoParent(): Boolean{
return parentId?.isEmpty() ?: false
}
}

参考文章
