从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的名称将与属性相同 名称,并且将设置程序的名称替换为 组。例如,对于属性
isOpen
,getter将被调用isOpen()
,二传手将称为setOpen()
。本规则适用 适用于任何类型的属性,而不仅仅是Boolean
。
也许是Kotlin问题的Firestore?
答案 0 :(得分:7)
尝试将@field:JvmField
添加到isValid
布尔属性。
答案 1 :(得分:4)
如果在模型类中使用名为isVip
的字段,类型为Boolean
,则在使用以下代码行实例化Img
类的对象时:>
val img = Img("Y9X ... zYn", true, "Nombre", "https://...")
isVip
属性在数据库中的显示方式将很简单:vip
,而不是您可能期望的isVip
。之所以将您的isVip
属性存储为isVip
而不仅仅是vip
,是因为您没有使用助手类而是通过手动方式将数据添加到数据库中。
出现该警告的原因是因为您的数据库中有一个字段,该字段在模型类中具有否对应项。在模型类中,您拥有一个名为isVip
的字段,该字段在数据库中应具有一个名为vip
的对应字段,并且现在为 not isVip
。因此Firestore无法在这些字段之间创建连接,这就是您收到该警告的原因。
要解决此问题,您可以从模型中删除(如果可能)旧数据,并使用模型类添加新数据。您需要在名为isVip
的模型类中拥有属性的名称,而在数据库中仅拥有vip
。
或者您可以将modelc类中的属性名称从isVip
更改为简单的vip
。