我有一个很奇怪的问题,我已经运行调试器并逐步执行代码以查看Firestore中的每个元素
我的Firestore数据库中有产品列表
结构体
shop -> shopId -> products -> productList
我有一个数据类如下
@Parcelize
data class Producto(
val imagenProducto: String = "",
val nombreProducto: String = "",
val descProducto: String = "",
val precio: Int = 0,
val hasDescuento: Boolean = false,
val tipoDescuento: Double = 0.0,
val isCombo: Boolean = false
) : Parcelable
现在,我用
isCombo
过滤的代码创建了两个列表,其中一个将包含所有产品(如果需要,可以打折)和组合(如果isCombo
bool(boolean) 值设置为true)现在,这很奇怪,因为我的代码获取了所有这些文档并将其发送到我的 View
suspend fun getProductosList(comercioId:String):Resource<MutableList<Producto>>{
val productList = mutableListOf<Producto>()
val snapshot = FirebaseFirestore.getInstance().collection("comercios").document(comercioId).collection("products").get().await()
for(producto in snapshot){
productList.add(producto.toObject(Producto::class.java))
}
return Resource.Success(productList)
}
在这里,我有一个商店的最终产品所在的子集合(商业)。
问题
因此,这是发生的情况,在我获取所有这些文档之后,该列表随列表中的每个元素一起出现在我的 View 中,但是该产品的值(value)并没有得到预期。
我在一个文档
isCombo = true
中放置了一个位置,但是当它出现在我的应用程序中时,它将这个值设置为false,但是另一个 bool(boolean) hasDescuento
附带了正确的值我尝试过的
用错字
这是输出,这就是我将数据存储在参考中的方式
这里
isCombo
设置为 true 现在,这就是我在检索此文档时看到的最终结果
因此,这里
isCombo
变为false,但是我的另一个 bool(boolean) hasDescuento带有来自数据库的正确值(对于另一种不同的产品),我怀疑我的数据类中有Parcelize批注,但所有其他不是isCombo的数据都已获取一般会发生什么?
最佳答案
似乎的属性为,而组合在Firestore中的映射方式有所不同,并且仅映射为组合而不是isCombo
,因此,将该属性的名称更改为hasCombo
,清理并重建了项目并使其正常工作。
感谢Alex Firebase Firestore toObject fails on Boolean property mapping
并将在文档中为boolean
数据类型的注释提供建议。
https://firebase.google.com/docs/firestore/manage-data/data-types