首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当Firestore数据库中的字段不可用时,如何处理错误?

当Firestore数据库中的字段不可用时,如何处理错误?
EN

Stack Overflow用户
提问于 2021-11-12 18:11:35
回答 2查看 90关注 0票数 0

我有一个带有一些属性的模型数据类。我已经向Firestore中添加了一些数据,并使用此模型类读取它们。后来,我决定在模型类中再添加几个属性,但还没有在Firestore数据库中添加新字段。当我像以前一样读取数据时,我的应用程序崩溃了。很明显,随着我们的深入,我们将添加更多的详细信息,但我们可能会也可能不会将这些新的详细信息添加到已经添加到数据库中的旧项目中。我该如何处理这种情况?

这就是我从“`Firestore”中读到的内容。

代码语言:javascript
复制
mFireStore.collection("product_details")
                .get()
                .addOnCompleteListener {
                    if (it.isSuccessful) {
                        for (document in it.result) {
                            val product = document.toObject(ProductDetails::class.java)
                            product.product_id = document.id
                            productsList.add(product)

                        }
                    } else {
                    }
                    tempProductsList.addAll(productsList)
                    listProducts()
                }
                .addOnFailureListener {
                }

这就是我得到错误的地方。

val product = document.toObject(ProductDetails::class.java)

编辑:下面提供了我的模型类的示例。它有很多字段,但我在这里只复制了几个。'min_order_quantity‘和'max_order_quantity’是我在这个模型类中新添加的两个字段,而Firestore中已经存在的项没有这些字段。

代码语言:javascript
复制
@Parcelize
data class ProductDetails(
    var product_id: String? = "",
    val title: String = "",
    val mrp: String= "0.00",
    val price: String = "0.00",
    val description: String = "",
    var min_order_quantity: String="",
    var max_order_quantity: String="",
) : Parcelable

Logcat:

代码语言:javascript
复制
Process: com.abc.xyz, PID: 19223
java.lang.VerifyError: Verifier rejected class com.abc.xyz.models.ProductDetails: void com.abc.xyz.models.ProductDetails.<init>() failed to verify: void com.abc.xyz.models.ProductDetails.<init>(): [0x1FB] Rejecting invocation, expected 1 argument registers, method signature has 2 or more (declaration of 'com.abc.xyz.models.ProductDetails' appears in /data/data/com.abc.xyz/code_cache/.overlay/base.apk/classes5.dex)
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
    at com.google.firebase.firestore.util.ApiUtil.newInstance(ApiUtil.java:43)
    at com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:757)
    at com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:741)
    at com.google.firebase.firestore.util.CustomClassMapper.convertBean(CustomClassMapper.java:542)
    at com.google.firebase.firestore.util.CustomClassMapper.deserializeToClass(CustomClassMapper.java:253)
    at com.google.firebase.firestore.util.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:100)
    at com.google.firebase.firestore.DocumentSnapshot.toObject(DocumentSnapshot.java:183)
    at com.google.firebase.firestore.QueryDocumentSnapshot.toObject(QueryDocumentSnapshot.java:116)
    at com.google.firebase.firestore.DocumentSnapshot.toObject(DocumentSnapshot.java:161)
    at com.google.firebase.firestore.QueryDocumentSnapshot.toObject(QueryDocumentSnapshot.java:97)
    at com.abc.xyz.ui.fragments.HomeFragment.getProductList$lambda-7(HomeFragment.kt:431)
    at com.abc.xyz.ui.fragments.HomeFragment.lambda$QeVGu-lWsXTqkddk(Unknown Source:0)
    at com.abc.xyz.ui.fragments.-$$Lambda$HomeFragment$QeVGu-lWsXTqkddk.onComplete(Unknown Source:2)
    at com.google.android.gms.tasks.zzj.run(com.google.android.gms:play-services-tasks@@17.2.0:4)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:246)
    at android.app.ActivityThread.main(ActivityThread.java:8633)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-16 05:14:17

据我所知,一个数据类可以拥有的参数数量是有限制的,我认为是245个。我已经有了245,当我添加另外两个时,问题就开始了。当我删除任意两个参数时,它都可以正常工作。感谢您的见解

票数 0
EN

Stack Overflow用户

发布于 2021-11-15 22:24:19

这不是firebase字段的问题。请尝试清除缓存并重新启动计算机。有关详细信息,请参阅此相关问题:

java.lang.VerifyError: Verifier rejected class on Lollipop when using release APK

如果您的模型中有一个字段不在Firestore中,它将被初始化为其默认值。(在您的情况下,为"")。

此外,如果模型中不存在firestore中的字段,则在反序列化期间将跳过该字段。一个数据类只能有一定数量的参数,可能是245个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69947345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档