Android Firestore布尔值设置为true时返回false
我有一个非常奇怪的问题,我已经运行了调试器并逐步通过代码查看Firestore中的每个元素 我的firestore数据库中有一个产品列表 结构Android Firestore布尔值设置为true时返回false,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我有一个非常奇怪的问题,我已经运行了调试器并逐步通过代码查看Firestore中的每个元素 我的firestore数据库中有一个产品列表 结构 shop -> shopId -> products -> productList 我有一个如下的数据类 @Parcelize data class Producto( val imagenProducto: String = "", val nombreProducto: String = "", val d
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布尔值设置为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)
}
在这里,我有一个子集合,其中有一家商店的最终产品
问题
所以,这里是它发生的情况,在我获取所有这些文档之后,列表出现在我的视图中,其中包含列表中每个元素的数据,但是产品的一个值不被尊重
我在一个文档中有place isCombo=true,但在我的应用程序中,它将该值设置为false,但另一个布尔值hasDescuento具有正确的值
我试过的
清理和重建
使缓存无效/重新启动
逐步使用调试器查看每个元素,看看我是否
用输入错误插入我的变量
检查我对数据的引用
这是输出,这是我如何将数据存储在我的引用中的
这里isCombo设置为true
现在,这就是我在检索此文档时看到的结果
因此,这里isCombo为false,但是我的另一个布尔hasdescounto从数据库中为另一个不同的产品提供了正确的值,我怀疑我的数据类中有Parcelize注释,但是所有其他不是isCombo的数据都是正常获取的
会发生什么情况?似乎在Firestore中,Combo之前的属性在Firestore中以不同的方式映射,并且映射为just Combo而不是isCombo,因此,将属性的名称更改为hasCombo,清理并重建了该项目,该项目成功了 多亏了亚历克斯 并将在文档中填写布尔数据类型注释的建议
似乎在Firestore中,Combo之前的属性映射方式有所不同,并且映射为just Combo而不是isCombo,因此,将属性的名称更改为hasCombo,清理并重建了该项目,结果成功了 多亏了亚历克斯 并将在文档中填写布尔数据类型注释的建议 在创建帮助程序类时,切勿尝试使用isDone、isCombo、isDeclared等字段,即字段不得以is作为前缀,否则将导致Firebase映射与Getter和Setter方法冲突 此行可能出现错误:
// Here bannerSnapshot is a QueryDocumentSnapshot object
CreateOfferObject product = bannerSnapshot.toObject(CreateOfferObject.class);
[注意:此错误通常发生在布尔字段中。]
我也有同样的问题,只是通过更改字段名、重置getter和setter来修复它
希望!这很有帮助。永远不要尝试使用isDone、isCombo、isDeclared等字段,即在创建帮助程序类时,字段不能以is作为前缀,否则会导致Firebase映射与Getter和Setter方法冲突
此行可能出现错误:
// Here bannerSnapshot is a QueryDocumentSnapshot object
CreateOfferObject product = bannerSnapshot.toObject(CreateOfferObject.class);
[注意:此错误通常发生在布尔字段中。]
我也有同样的问题,只是通过更改字段名、重置getter和setter来修复它
希望!这很有帮助。我也有同样的问题,我发现了这个问题
我也有同样的问题,我发现了这个 我怀疑isCombo被解释为名为combo的布尔属性的getter。请始终记住,Firebase/Firestore遵循JavaBean模式进行属性命名,这就是其中之一。我怀疑isCombo被解释为名为combo的布尔属性的getter。请始终记住,Firebase/Firestore遵循JavaBean模式进行属性命名,这就是其中之一。