【问题标题】:Firebase Firestore toObject fails on Boolean property mappingFirebase Firestore toObject 在布尔属性映射上失败
【发布时间】:2019-02-16 11:39:59
【问题描述】:

在从 Firestore 中提取数据时,我使用.toObject() 将接收到的数据映射到我的数据类中,即:

data class Img(var event_uid: String = "", var isVip: Boolean = false , var nombre: String = "", var url: String = "")

但是,映射效果不佳。我在任务中收到了字段isVip=>true,但是对象字段被映射为false(默认值)。

我做错了什么?

编辑: 我在 Logcat 中看到了

W/Firestore: (0.6.6-dev) [zzevb]: No setter/field for isVip found on class ***.model.Img

根据Kotlin Docu

如果属性的名称以is开头,则不同的名称映射 使用规则:getter 的名称将与属性相同 name,而setter的名字将通过替换is来获得 放。例如,对于属性isOpen,getter 将被调用 isOpen() 和 setter 将被称为 setOpen()。此规则适用 适用于任何类型的属性,而不仅仅是Boolean

可能是带有 Kotlin 问题的 Firestore?

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore


    【解决方案1】:

    如果您在模型类中使用名为isVip 的字段,该字段的类型为Boolean,则在使用以下代码行实例化Img 类的对象时:

    val img = Img("Y9X ... zYn", true, "Nombre", "https://...")
    

    isVip 属性在数据库中的样子很简单:vip,而不是您可能预期的isVip。您的isVip 属性存储为isVip 而不仅仅是vip 的原因是您没有使用帮助程序类将数据添加到数据库中,而是以某种方式手动添加。

    您收到该警告的原因是您的数据库中有一个字段在您的模型类中有 no 对应对象。在您的模型类中,您有一个名为 isVip 的字段,它在数据库中应该有一个名为 vipnot isVip 的对应字段,就像现在一样。因此 Firestore 无法在这些字段之间创建连接,这就是您收到该警告的原因。

    要解决这个问题,您可以从数据库中删除(如果可能的话)旧数据并使用模型类添加新数据。您需要在模型类中将属性名称命名为 isVip,而在数据库中只需 vip

    或者您可以将您的模型类中的属性名称从isVip 更改为简单的vip,就是这样。

    【讨论】:

    • 您好,您的解释很棒,谢谢。让一切都有意义。我在我的 Angular webapp 中创建文档时添加了这个字段,现在使用我的 Kotlin 时遇到了这个问题。我尝试更改 Firestore 中的属性并工作。但是,我应该在我的 Angular 应用程序中更改所有引用,这需要时间,但可能是正确的解决方案。为了解决我现在的问题,我使用了@TheTechWolf solution
    【解决方案2】:

    尝试将@field:JvmField 添加到isValid 布尔属性。

    【讨论】:

    • 为了解决我的问题,我采用了您的解决方案。但是,正确的方法应该是@Alex Mamo says
    • 您如何知道@field 属性? toObject 文档中没有提到它。你能指出我在哪里可以阅读更多关于它的信息吗?也许还有更多有用的属性。
    • @t3chb0t @field 是 Kotlin 注释,它不是 Firebase 的一部分。 @JvmField 注释在这里起到了作用,它告诉 Kotlin 编译器它不应该创建 isValid 属性的 getter 和 setter,并且应该将此属性作为字段公开。您可以阅读更多关于@field 和其他注释使用站点目标here 的信息。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多