Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Firebase数据导入android类_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

将Firebase数据导入android类

将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方法 查询成功,但导入崩溃。希望这意味着我一切都设

我正试图从下面的示例链接中查询Firebase数据并将其存储到恐龙类中。当直接从Firebase导入恐龙事实类时,我遇到了一个问题。它能够创建查询并输入“onchildaded”方法。然后它进入恐龙构造函数类,但随后崩溃

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;
    }
}