将Firebase数据导入android类
我正试图从下面的示例链接中查询Firebase数据并将其存储到恐龙类中。当直接从Firebase导入恐龙事实类时,我遇到了一个问题。它能够创建查询并输入“onchildaded”方法。然后它进入恐龙构造函数类,但随后崩溃将Firebase数据导入android类,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正试图从下面的示例链接中查询Firebase数据并将其存储到恐龙类中。当直接从Firebase导入恐龙事实类时,我遇到了一个问题。它能够创建查询并输入“onchildaded”方法。然后它进入恐龙构造函数类,但随后崩溃 DinosaurFacts facts = snapshot.getValue(DinosaurFacts.class); //CRASHES HERE 这是我们的课堂 } 以下是MainActivity中的onCreate方法 查询成功,但导入崩溃。希望这意味着我一切都设
DinosaurFacts facts = snapshot.getValue(DinosaurFacts.class); //CRASHES HERE
这是我们的课堂
}
以下是MainActivity中的onCreate方法
查询成功,但导入崩溃。希望这意味着我一切都设置正确
以下是日志输出:
这是该数据库中恐龙之一的JSON:
"bruhathkayosaurus": {
"appeared": -70000000,
"height": 25,
"length": 44,
"order": "saurischia",
"vanished": -70000000,
"weight": 135000
},
您使用的类只有以下属性的字段+getter:高度
,长度
,重量
。因此,当Firebase试图将JSON反序列化为对象时,它会抱怨未映射的属性
消除错误的最简单方法是告诉Jackson(Firebase内部使用它在JSON和Java之间映射)忽略它在JSON中遇到的任何未映射属性:
@JsonIgnoreProperties(ignoreUnknown = true)
public static class DinosaurFacts {
但是要小心这一点。如果现在将对象
写回数据库,它将只具有高度
、长度
和重量
属性。它不会有:出现
、顺序
或消失
。事实上:即使属性以前确实存在于数据库中,回写此对象也会删除它们
因此,正确的解决方案是将JSON结构中的所有属性映射到Java类中:
public static class DinosaurFacts {
long appeared, vanished;
double height, length, weight;
String order;
public long getAppeared() {
return appeared;
}
public long getVanished() {
return vanished;
}
public double getHeight() {
return height;
}
public double getLength() {
return length;
}
public double getWeight() {
return weight;
}
public String getOrder() {
return order;
}
}
@弗兰克万帕夫伦同意了。太棒了,它现在可以工作了!!我在文档中遗漏了这个吗?我不确定。文档明确提到必须将JSON中的每个属性与Java中的一个字段相匹配(提示:这部分是我写的)。但它并没有解释像@JsonIgnoreProperties
这样的技巧。使用我在问题评论中提供的链接。
"bruhathkayosaurus": {
"appeared": -70000000,
"height": 25,
"length": 44,
"order": "saurischia",
"vanished": -70000000,
"weight": 135000
},
@JsonIgnoreProperties(ignoreUnknown = true)
public static class DinosaurFacts {
public static class DinosaurFacts {
long appeared, vanished;
double height, length, weight;
String order;
public long getAppeared() {
return appeared;
}
public long getVanished() {
return vanished;
}
public double getHeight() {
return height;
}
public double getLength() {
return length;
}
public double getWeight() {
return weight;
}
public String getOrder() {
return order;
}
}