Firebase Realtime Database推送数据时应用崩溃求助
从你的堆栈报错信息可以直接定位核心问题:Firebase在解析MedicineUsageData类时,发现了针对drugSubstance字段的冲突getter方法。这是因为Firebase严格遵循JavaBean命名规范来映射实体类与数据库节点,一旦getter方法命名不符合规范,就会触发这个解析异常。
问题根源
你的实体类中字段名为drugSubstance,按照JavaBean规范,对应的getter方法应该是getDrugSubstance()(注意字段名的第二个字母大写,getter方法中首字母D也要大写)。但你大概率是手动编写/生成了错误的getter(比如getdrugSubstance(),首字母D小写),或者不小心同时存在两种不同命名的getter方法,导致Firebase无法确定使用哪一个。
解决方案
按照以下步骤逐一修复:
修正
drugSubstance的getter/setter方法
确保MedicineUsageData类中,drugSubstance对应的getter和setter严格遵循规范:public String getDrugSubstance() { return drugSubstance; } public void setDrugSubstance(String drugSubstance) { this.drugSubstance = drugSubstance; }绝对不能保留
getdrugSubstance()这类不符合命名规则的方法。用IDE自动生成getter/setter避免手动错误
为了彻底杜绝命名失误,建议直接使用Android Studio的自动生成功能:- 右键点击
MedicineUsageData类内部代码区域 - 选择
Generate->Getter and Setter - 勾选所有需要生成方法的字段,点击
OK即可生成完全符合规范的代码
- 右键点击
清理并重建项目
修复完成后,执行Build->Clean Project,再执行Build->Rebuild Project,确保所有编译缓存都被更新,避免旧代码残留影响运行。
验证
完成上述操作后,重新调用writeNewMedicineUsage方法,Firebase就能正确解析MedicineUsageData类,冲突getter的异常会消失,数据也能正常推送到数据库节点了。
内容的提问来源于stack exchange,提问作者muratcanyeldan

