我有一个很奇怪的问题,我已经运行调试器并逐步执行代码以查看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附带了正确的值

我尝试过的
  • 清理并重建
  • 使缓存无效/重新启动
  • 与调试器一起逐步检查每个元素,看看我是否
    用错字
  • 插入我的变量
  • 检查我对数据的引用

  • 这是输出,这就是我将数据存储在参考中的方式

    android - Firestore bool 值设置为true时返回false-LMLPHP

    这里isCombo设置为 true

    现在,这就是我在检索此文档时看到的最终结果

    android - Firestore bool 值设置为true时返回false-LMLPHP

    因此,这里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

    08-16 12:52