从Firebase数据库获取数据时Android应用崩溃问题求助
问题:Firebase Firestore数据获取时应用崩溃
- 开发基于Firebase的支出管理App,匿名登录、添加支出/收入功能正常,但调用
getData()从Firebase数据库获取数据时应用崩溃。 - 注释
getData()方法后,应用不再崩溃,且数据可正常上传至Firebase。
错误日志
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.expensemanager, PID: 10677 java.lang.RuntimeException: Could not deserialize object. Class com.example.expensemanager.ExpenseModel does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped at com.google.firebase.firestore.util.CustomClassMapper.deserializeError(com.google.firebase:firebase-firestore@@21.4.0:563) at com.google.firebase.firestore.util.CustomClassMapper.access$200(com.google.firebase:firebase-firestore@@21.4.0:54) at com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize(com.google.firebase:firebase-firestore@@21.4.0:749) at com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize(com.google.firebase:firebase-firestore@@21.4.0:741) at com.google.firebase.firestore.util.CustomClassMapper.convertBean(com.google.firebase:firebase-firestore@@21.4.0:542) at com.google.firebase.firestore.util.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-firestore@@21.4.0:253) at com.google.firebase.firestore.util.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-firestore@@21.4.0:100) at com.google.firebase.firestore.DocumentSnapshot.toObject(com.google.firebase:firebase-firestore@@21.4.0:210) at com.google.firebase.firestore.QueryDocumentSnapshot.toObject(com.google.firebase:firebase-firestore@@21.4.0:116) at com.google.firebase.firestore.DocumentSnapshot.toObject(com.google.firebase:firebase-firestore@@21.4.0:188) at com.google.firebase.firestore.QueryDocumentSnapshot.toObject(com.google.firebase:firebase-firestore@@21.4.0:97) at com.example.expensemanager.MainActivity$5.onSuccess(MainActivity.java:107) at com.example.expensemanager.MainActivity$5.onSuccess(MainActivity.java:101) at com.google.android.gms.tasks.zzn.run(Unknown Source:4) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
解决方案
核心问题是**ExpenseModel类缺少无参构造函数**,Firebase Firestore在将文档反序列化为自定义对象时,必须依赖无参构造函数来实例化对象。
修复步骤:
- 打开
ExpenseModel.java文件,添加无参构造函数:
public class ExpenseModel { // 原有成员变量、带参构造函数和getter/setter方法 // 添加无参构造函数 public ExpenseModel() { // 空实现即可,无需逻辑 } }
- 若项目启用了ProGuard,需在混淆规则文件中添加保护规则,避免构造函数被混淆:
-keep class com.example.expensemanager.ExpenseModel { public <init>(); }
内容的提问来源于stack exchange,提问作者Shubham sahane Official
相关产品推荐
相关产品推荐

