Vla*_*rzu 3 java android firebase firebase-realtime-database
我有大问题。使用 Android Emulator 运行该应用程序效果很好,但是当我将该应用程序放在真实手机上时,出现此错误:
java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.lang.Long to boolean (found in field 'imp')
Run Code Online (Sandbox Code Playgroud)
我的 Firebase 数据没问题,'imp' 字段是数据库中的一个布尔值,所以我从数据库中检索一个布尔值并将其存储在一个布尔变量中。当数据作为布尔值从 Firebase 发送时,我怎么能说我收到了 Long?
为什么只有真手机才会出现这种情况?
现在我真的不明白为什么在 Android Emulator 中工作正常并且在真实手机中安装应用程序会给我这个错误。
这是我处理数据的适配器:
public class modelNoutati {
String name;
String cont;
Date data;
Boolean imp;
public modelNoutati(){ }
public modelNoutati(String cont, Date data, Boolean imp, String name) {
this.name = name;
this.cont = cont;
this.data = data;
this.imp = imp;
}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Date getData() {return data;}
public void setData(Date data) {this.data = data;}
public String getCont() {return cont;}
public void setCont (String cont) {this.cont = cont; }
public Boolean getImp () {return imp;}
public void setImp (Boolean imp) {this.imp = imp;}
Run Code Online (Sandbox Code Playgroud)
我在doc.getDocument().toObject(modelNoutati.class)上遇到了这个问题
for (DocumentChange doc : documentSnapshots.getDocumentChanges()){
if(doc.getType() == DocumentChange.Type.ADDED) {
modelNoutati newsInt = doc.getDocument().toObject(modelNoutati.class);
newsL.add(newsInt);
newsAdaptor.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
日志猫:
Process: projects.nv.umcstudent, PID: 14354
java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.lang.Long to boolean (found in field 'imp')
at com.google.android.gms.internal.zzeym.zzc(Unknown Source)
at com.google.android.gms.internal.zzeym.zza(Unknown Source)
at com.google.android.gms.internal.zzeym.zzb(Unknown Source)
at com.google.android.gms.internal.zzeym.zza(Unknown Source)
at com.google.android.gms.internal.zzeym$zza.zza(Unknown Source)
at com.google.android.gms.internal.zzeym.zza(Unknown Source)
at com.google.android.gms.internal.zzeym.zza(Unknown Source)
at com.google.firebase.firestore.DocumentSnapshot.toObject(Unknown Source)
at com.google.firebase.firestore.QueryDocumentSnapshot.toObject(Unknown Source)
at projects.nv.umcstudent.News$1.onEvent(News.java:70)
at projects.nv.umcstudent.News$1.onEvent(News.java:57)
at com.google.firebase.firestore.zzi.onEvent(Unknown Source)
at com.google.android.gms.internal.zzeyn.zza(Unknown Source)
at com.google.android.gms.internal.zzeyo.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Run Code Online (Sandbox Code Playgroud)
以下代码行:
java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.lang.Long to boolean (found in field 'imp')
Run Code Online (Sandbox Code Playgroud)
准确地告诉你问题是什么。您的imp属性在模型类中声明为 aBoolean但是当您尝试从数据库中获取此属性的值时,您将获得Long. 目前在Java中没有办法,你可以转换Long到Boolean。
要解决此问题,您需要清除数据库并添加新数据,其中imp属性将保存Boolean模型类中的Long值,而不是值。