如何在Firebase类中表示嵌套数据

时间:2015-10-08 08:25:41

标签: android firebase firebase-realtime-database

从Firebase示例中获取,如果我有像这样的恐龙事实数据结构:

{
  "lambeosaurus": {
    "name": "lamby",
    "work": "eat",
    "dimensions": {
      "height" : 2.1,
      "length" : 12.5,
      "weight": 5000
    }
  },
  "stegosaurus": {
    "name": "stego",
    "work": "play",
    "dimensions": {
      "height" : 4,
      "length" : 9,
      "weight" : 2500
    }
  }
}

如何在Android类中为Firebase表示此结构,以便从DataSnapshot.getValue(DinosaurFacts.class)转换?

名称和工作表示为字符串,但如何表示"维度"在课堂上收集?

另外,如何从DataSnapshot访问有关身高和数量的数据值?重量?

修改 我可以通过快照获取循环的单个元素,但我试图找到如何在类结构中表示数据。

for(DataSnapshot child : dataSnapshot.getChildren()) {

                Log.d("hz-key:", child.getKey().toString());
                Log.d("hz-val:", child.getValue().toString());
            }

2 个答案:

答案 0 :(得分:14)

表示此结构的JavaBean类是:

public static class DinosaurFacts {
    String name;
    String work;
    Dimensions dimensions;

    public String getName() {
        return name;
    }

    public String getWork() {
        return work;
    }

    public Dimensions getDimensions() {
        return dimensions;
    }

    public class Dimensions {
        double height;
        long weight;
        double length;

        public double getHeight() {
            return height;
        }

        public long getWeight() {
            return weight;
        }

        public double getLength() {
            return length;
        }
    }
}

然后你可以阅读dino:

DinosaurFacts dino = dinoSnapshot.getValue(DinosaurFacts.class);

并使用例如:

访问维度
dino.getDimensions().getWeight();

答案 1 :(得分:0)

我跟着弗兰克的回答,但我收到的错误是:

  

子类需要一个空构造函数

即使我有一个。

<强>解决方案:

为它创建一个新的(外部)类。

以下是我的例子:

第一类:

public class Event {

    private String name;
    private Place place;
}

子类:

public class Place {

     private String name;
     private Location location;

}

子类的子级:

public class Location {

     private String city;
     private Double longitude, latitude;

}