Kotlin - Firestore toObject 方法未按预期工作
Posted
技术标签:
【中文标题】Kotlin - Firestore toObject 方法未按预期工作【英文标题】:Kotlin - Firestore toObject method not working as intended 【发布时间】:2021-12-29 02:57:20 【问题描述】:我正在为我的 android 项目使用 Firestore,并且我正在使用以下代码将获取的文档转换为自定义数据类
val userData = user.toObject(UserData::class.java)!!
现在,当没有发生代码混淆时,此行可以完美运行,但是,在混淆后,此行不会失败,而是不会将 user
文档数据复制到 userData
。所以我认为问题可能出在 Firestore 和代码混淆上。
以前有没有人遇到过这个问题?
【问题讨论】:
我认为这个answer 会有所帮助,对吧? 是的,确实如此,但我想要一种不会使课程混淆的方法。感谢您的链接 【参考方案1】:toObject()
方法使用反射从用户文档中填充您的UserData
模型。现在您的 UserData
类被混淆了,Firestore 无法将文档中的值映射到模型类。
要解决此问题,您需要为您在 Firebase 中使用的所有数据模型禁用代码混淆。
最简单的解决方法是在您的数据类中添加 @Keep
注释。
@Keep
data class UserData(...)
如果您有很多这样的模型,您可以通过向您的proguard-rules.pro
添加更多规则来禁用整个文件或包的混淆。
例如,该语句将在代码收缩和混淆的同时保持model
包内的所有类完整:
-keep class com.example.app.data.models.** *;
查看documentation 了解更多此类规则。
【讨论】:
以上是关于Kotlin - Firestore toObject 方法未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
Firestore - 如何在 Kotlin 中排除数据类对象的字段
如何从 kotlin 中的 firestore 读取映射数据
如何使用 kotlin 数据类获取 Firestore 文档的文档 ID
Kotlin - Firestore toObject 方法未按预期工作