Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase Firestore toObject在布尔属性映射上失败_Android_Firebase_Kotlin_Google Cloud Firestore - Fatal编程技术网

Android Firebase Firestore toObject在布尔属性映射上失败

Android Firebase Firestore toObject在布尔属性映射上失败,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,从Firestore中提取数据时,我使用.toObject()将接收到的数据映射到我的数据类中,即: data class Img(var event_uid: String = "", var isVip: Boolean = false , var nombre: String = "", var url: String = "") 然而,映射效果并不好。我在任务中收到了字段isVip=>true,但对象字段被映射为false(默认值) 我做错了什么 编辑: 我在Logcat中看到了

从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
根据:

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


可能是有Kotlin问题的Firestore?

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

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

val img = Img("Y9X ... zYn", true, "Nombre", "https://...")
您的
isVip
属性在数据库中的显示方式很简单:
vip
,而不是您可能期望的
isVip
。您的
isVip
属性存储为
isVip
,而不仅仅是
vip
,这是因为您没有使用helper类将数据添加到数据库中,而是手动添加的

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

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


或者,您可以将modelc类中属性的名称从
isVip
更改为简单的
vip

您好,您的解释太棒了,谢谢。说得通。我在Angular webapp中创建文档时添加了此字段,现在使用我的Kotlin解决了此问题。我试着在Firestore换房子,然后工作了。然而,我应该在Angular应用程序中更改所有参考,这需要时间,但可能是正确的解决方案。现在为了解决我的问题,我用了@TheTechWolf来解决我的问题,我用了你的解决方案。但是,正确的方法应该是作为@Alex Mamo处理。您如何知道
@field
属性?文档中没有提到它。你能告诉我在哪里可以读到更多关于它的资料吗?也许还有更多有用的属性。@t3chb0t
@field
是Kotlin注释,它不是Firebase的一部分
@JvmField
注释在这里起作用,它对Kotlin编译器说,它不应该创建isValid属性的getter和setter,而应该将此属性作为字段公开。您可以阅读有关
@field
和其他注释使用站点目标的更多信息。