You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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在将文档反序列化为自定义对象时,必须依赖无参构造函数来实例化对象。

修复步骤:

  1. 打开ExpenseModel.java文件,添加无参构造函数:
public class ExpenseModel {
    // 原有成员变量、带参构造函数和getter/setter方法
    
    // 添加无参构造函数
    public ExpenseModel() {
        // 空实现即可,无需逻辑
    }
}
  1. 若项目启用了ProGuard,需在混淆规则文件中添加保护规则,避免构造函数被混淆:
-keep class com.example.expensemanager.ExpenseModel {
    public <init>();
}

内容的提问来源于stack exchange,提问作者Shubham sahane Official

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:20:27