Firestore 布尔值设置为 true 时返回 false

Gas*_*lén 7 android kotlin firebase google-cloud-firestore

我有一个非常奇怪的问题,我已运行调试器并单步执行代码以查看 Firestore 中的每个元素

我的 firestore 数据库中有一个产品列表

结构

shop -> shopId -> products -> productList
Run Code Online (Sandbox Code Playgroud)

我有一个数据类如下

@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
Run Code Online (Sandbox Code Playgroud)

现在,我用来过滤的代码isCombo创建两个列表,其中一个列表将包含所有产品(如果需要,可享受折扣)和组合(如果布尔isCombo值设置为 true)

现在,这很奇怪,因为我的代码获取所有这些文档并将其发送到我的视图

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)
    }
Run Code Online (Sandbox Code Playgroud)

这里我有一个子集合,其中包含商店(comercio)的最终产品。

问题

因此,发生的事情是这样的,在我获取所有这些文档后,列表中的每个元素的数据都出现在我的视图中,但产品的一个值并未按预期出现。

我在一个文档中占有一席之地isCombo = true,但是当这涉及到我的应用程序时,它将此值设置为 false,但另一个布尔值hasDescuento具有正确的值

我尝试过的

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

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

在此输入图像描述

这里isCombo设置为true

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

在此输入图像描述

所以,这里isCombo是 false,但我的另一个布尔值 h​​asDecuento 带有来自数据库的正确值(对于另一个不同的产品),我怀疑我的数据类中的 Parcelize 注释,但所有其他不是 isCombo 的数据都正常获取

会发生什么?

Rod*_*ues 13

我遇到了同样的问题,我找到了这个解决方案

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,
    @field:JvmField // use this annotation if your Boolean field is prefixed with 'is'
    val isCombo: Boolean = false
)
Run Code Online (Sandbox Code Playgroud)

https://firebase.google.com/docs/firestore/manage-data/add-data#kotlin+ktx_3


Gas*_*lén 5

似乎在Combo在 Firestore 中以不同方式映射之前的属性,并且仅映射为组合而不是,因此,将属性的名称更改为,清理并重建项目并且它起作用了。isCombohasCombo

感谢 Alex Firebase Firestore toObject 在布尔属性映射上失败

并将boolean在文档中填写数据类型注释的建议。

https://firebase.google.com/docs/firestore/manage-data/data-types

  • 我怀疑 `isCombo` 被解释为名为 `combo` 的布尔属性的 getter。请始终记住,Firebase/Firestore 遵循 JavaBean 模式进行属性命名,这就是其中之一。 (5认同)