Android Firebase数据获取报错:No setter/field字段未找到问题
这些W/ClassMapper警告的核心原因是:Firebase在将数据库中的数据映射到你的Chapter实体类时,找不到与数据库字段名匹配的类属性或对应的Setter方法,另外日志里还出现了chatperOne的拼写错误(正确应为chapterOne),这也是关键问题之一。
下面是具体的解决方案:
先修正拼写错误
日志里的chatperOne明显是拼写失误(少了字母a),先确认你的Firebase数据库中字段的拼写是否正确。如果数据库里确实是chatperOne,那要么修正数据库的字段名为chapterOne(推荐,避免后续混淆),要么在Chapter类中通过注解映射这个拼写错误的字段。保证类属性与数据库字段名完全匹配
你的Chapter类需要定义与数据库字段名一致的属性,大小写也要对应(Firebase默认遵循驼峰命名匹配)。比如数据库里有chapterOne和chapterTwo,类里应该这样写:public class Chapter { // 与数据库字段名完全一致的属性 private String chapterOne; private String chapterTwo; // Firebase必须的无参构造函数 public Chapter() {} // 可选:带参数的构造函数 public Chapter(String chapterOne, String chapterTwo) { this.chapterOne = chapterOne; this.chapterTwo = chapterTwo; } // 对应的Getter和Setter方法,遵循JavaBean规范 public String getChapterOne() { return chapterOne; } public void setChapterOne(String chapterOne) { this.chapterOne = chapterOne; } public String getChapterTwo() { return chapterTwo; } public void setChapterTwo(String chapterTwo) { this.chapterTwo = chapterTwo; } }确保Firebase能访问字段
如果你不想写Setter方法,可以直接把属性设为public,Firebase也能直接读取和写入:public class Chapter { public String chapterOne; public String chapterTwo; public Chapter() {} }使用@PropertyName注解处理字段名不匹配的情况
如果你无法修改数据库字段名或类属性名,用Firebase的@PropertyName注解来强制映射:import com.google.firebase.database.PropertyName; public class Chapter { @PropertyName("chatperOne") // 映射数据库里拼写错误的字段 private String chapterOne; @PropertyName("chapterTwo") private String chapterTwo; public Chapter() {} @PropertyName("chatperOne") public String getChapterOne() { return chapterOne; } @PropertyName("chatperOne") public void setChapterOne(String chapterOne) { this.chapterOne = chapterOne; } // chapterTwo的Getter和Setter同理 }必须保留无参构造函数
Firebase需要通过无参构造函数来实例化你的Chapter对象,如果类里只有带参数的构造函数,会导致解析失败,一定要加上无参构造。
按照以上步骤调整后,这些ClassMapper的警告应该就会消失,你也能正常从Firebase数据库获取数据了。
内容的提问来源于stack exchange,提问作者Junburg

