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 方法未按预期工作

如何从 Firestore 中读取使用 Kotlin 中的 hashMap 添加的文档?

作为 Kotlin 中的函数的结果,如何从 Firestore 数据库返回列表?