Closed Summer-Android closed 8 months ago
小伙子,提供 GroupChatByPageResult 类源码,以及网络请求的代码。
小伙子,提供GroupChatByPageResult类源码,以及网络请求的代码。
data class GroupChatByPageResult(
val datas: List<Data>,
val empty: Boolean,
val total: Int
) {
data class Data(
val groupId: String,
val groupImg: String,
val groupName: String,
val groupNum: Int,
var selectState: Boolean = false,
)
}
@POST("im-business/groupChat/groupChatByPage")
suspend fun groupChatByPage(@Body request: GroupChatByPageRequest): ApiResponse<GroupChatByPageResult>
小伙子,datas
这个字段被你定义成了非空,但是又没有给它赋值导致的问题。
你尝试把 datas
定义成可空的,又或者在字段上面赋一下默认值试试看?
我上面json中datas是有值的
但是 Gson 的解析方式是先反射创建,再解析 Json 进行赋值,你在反射创建那一步就通过不了。
但是 Gson 的解析方式是先反射创建,再解析 Json 进行赋值,你在反射创建那一步就通过不了。
为什么9.0的版本没有问题
@Summer-Android 因为从 9.0 版本后,反射创建 kotlin data class 类的方式被修改了,具体你可以代码提交记录,准确来讲 9.0 的代码存在一些 Bug,所以我修改了 kotlin data class 类的反射创建方式。
尝试你把
datas
定义成可空的,又或者在上面的字段赋一下默认值试试看?
定义为可空类型是没有问题了,但是假设后台返回的结果一定是有数据的,我不想定义为可空类型,因为定义为可空我就要去做判空处理
9.0升级9.3 就没法使用了 我不想定义为可空类型,因为定义为可空我就要去做判空处理
尝试你把
datas
定义成可空的,又或者在上面的字段赋一下默认值试试看?定义为可空类型是没有问题了,但是假设后台返回的结果一定是有数据的,我不想定义为可空类型,因为定义为可空我就要去做判空处理
小伙子,你这种写法是有问题的,你既然不想让 datas
为空,那么应该给 datas
赋一个默认值,但是你又没有那么做,归根结底是编译器没有限定 kotlin data class 非空字段一定要赋值的问题,当然这个是我认为最理想的方法,但是 kotlin 并没有这样限定,所以留下了这么一个坑,前期你先这样做,后面我再想想能不能通过框架内部解决这个问题(目前暂时没有想到好的解决方案,如果你有的话,欢迎提供给我)
小伙子,针对这个问题,我在框架内部进行了处理,当你在 data class 类上面定义了不为空的字段,但是又没有赋值,那么框架会自动赋予一个默认值,不同类型的字段默认值也不相同,你可以参考一下
String 类型字段的默认值:""
Int 类型字段的默认值:0
Long 类型字段的默认值:0
Short 类型字段的默认值:0
Byte 类型字段的默认值:0
Float 类型字段的默认值:0.0f
Double 类型字段的默认值:0.0
Char 类型字段的默认值:\u0000
Boolean 类型字段的默认值:false
其他类型字段的默认值:反射创建对象(支持 kotlin data class 类型)
@Summer-Android 小伙子,有空可以测试一下,如果有问题请及时反馈给我。
//这种后台data没有数据的时候 返回一个[]空数组 为什么不能解析了 报错了?
@xuxinjiang 小伙子,你这个属于第三方库依赖的问题,你加一下这个的依赖应该就没有问题了
dependencies {
// Kotlin 反射库:用于反射 Kotlin data class 类对象
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.5.10'
}
@Summer-Android @xuxinjiang 小伙子们,远程依赖已更新,更新到 9.5 版本即可
@xuxinjiang 还有跟这位小伙子说声抱歉,没有及时更新远程依赖,但是我有自己考虑,没有及时更新远程依赖的原因如下:
框架版本【必填】
9.3
问题描述【必填】
json解析问题
复现步骤【必填】
json如下
报错信息如下
是否必现【必填】
是
项目 targetSdkVersion【必填】
33
出现问题的手机信息【必填】
小米mix2、逍遥模拟器(android 9版本)
出现问题的安卓版本【必填】
Android 9
问题信息的来源渠道【必填】
自己遇到的
是部分机型还是所有机型都会出现【必答】
目前仅测试小米mix2、逍遥模拟器(android 9版本)
框架最新的版本是否存在这个问题【必答】
是
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
issue 列表中是否有人曾提过类似的问题【必答】
是
是否已经搜索过了 issue 列表但还未能解决的【必答】
是
是否可以通过 Demo 来复现该问题【必答】
是
提供报错堆栈
No response
提供截图或视频
No response
提供解决方案
No response