Fragment中Firestore数据展示到RecyclerView报Post无无参构造错误如何解决
错误产生原因
Firebase Firestore在将数据库数据反序列化为本地类对象时,要求目标类必须存在可访问的无参数构造方法,用于先实例化空对象,再逐一对应赋值数据库字段。
你当前定义的Post数据类中,createdAt字段未设置默认值,导致Kotlin不会自动生成无参构造方法,Firebase无法实例化Post对象,因此抛出该异常。
修复方案
方案一(推荐):给所有字段添加默认值
给Post类中未设置默认值的createdAt字段添加默认值,Kotlin会自动生成符合要求的无参构造方法:
data class Post ( val descrription: String = "", val createdBy: User = User(), val currentTime:String = "", val currentDate:String = "", val createdAt:Long = 0L )
注意:依赖的
User类也需要保证所有字段都有默认值,否则会触发相同类型的反序列化错误。
方案二:手动添加无参次级构造方法
如果你不想修改原有字段的定义,可以手动添加无参次级构造方法,统一填充默认值:
data class Post ( val descrription: String, val createdBy: User, val currentTime:String, val currentDate:String, val createdAt:Long ) { // 手动定义无参构造方法 constructor() : this("", User(), "", "", 0L) }
额外混淆配置
如果你开启了ProGuard/R8代码混淆,需要在proguard-rules.pro文件中添加规则,避免模型类和构造方法被混淆移除:
-keep class models.Post { *; } -keep class models.User { *; }
内容的提问来源于stack exchange,提问作者Himanshu Bansal
相关产品推荐
相关产品推荐

