我有一个带有一些属性的模型数据类。我已经向Firestore中添加了一些数据,并使用此模型类读取它们。后来,我决定在模型类中再添加几个属性,但还没有在Firestore数据库中添加新字段。当我像以前一样读取数据时,我的应用程序崩溃了。很明显,随着我们的深入,我们将添加更多的详细信息,但我们可能会也可能不会将这些新的详细信息添加到已经添加到数据库中的旧项目中。我该如何处理这种情况?
这就是我从“`Firestore”中读到的内容。
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中已经存在的项没有这些字段。
@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="",
) : ParcelableLogcat:
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)发布于 2021-11-16 05:14:17
据我所知,一个数据类可以拥有的参数数量是有限制的,我认为是245个。我已经有了245,当我添加另外两个时,问题就开始了。当我删除任意两个参数时,它都可以正常工作。感谢您的见解
发布于 2021-11-15 22:24:19
这不是firebase字段的问题。请尝试清除缓存并重新启动计算机。有关详细信息,请参阅此相关问题:
java.lang.VerifyError: Verifier rejected class on Lollipop when using release APK
如果您的模型中有一个字段不在Firestore中,它将被初始化为其默认值。(在您的情况下,为"")。
此外,如果模型中不存在firestore中的字段,则在反序列化期间将跳过该字段。一个数据类只能有一定数量的参数,可能是245个。
https://stackoverflow.com/questions/69947345
复制相似问题