2015-10-08 71 views
4

从火力地堡示例获取的,如果我有一个恐龙事实数据结构这样的嵌套数据:如何代表火力地堡类

{ 
    "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的班火力地堡从投DataSnapshot.getValue(DinosaurFacts.class)

名称和工作表示为字符串,但如何表示类中的“维度”集合?

另外我怎样才能访问数据值从DataSnapshot关于高度&重量?

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

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

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

你还尝试过什么吗? –

+0

是的,我可以使用dataSnapshot.getChildren获取单个数据 - >获取值和密钥。但我想知道如何直接在我的java类中表示嵌套结构。刚刚更新了这个问题。 – srinivas

回答

11

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

然后你可以阅读与恐龙:

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

而且随着访问的尺寸,例如:

dino.getDimensions().getWeight(); 
+0

太棒了!谢谢。是的这种方式与个人课堂我可以封装我的所有自定义结构干净。 – srinivas

+1

如果我的一个孩子属性是一个整数数组,该怎么办?我会用列表数组来检索数据吗?我知道firebase将数组数据存储为对象,但是如何将其转换为java属性? – kreshendo

+1

请注意,子类需要声明静态,如果它有一个构造函数,否则将导致“...缺少一个没有参数的构造函数”(http://stackoverflow.com/a/39087010/1004331) – astromme

0

我跟着Fran K公司的答案,但我得到了一个错误,指出:

子类需要一个空的构造

即使我有一个。

解决方案:

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


这是我的例子:

第一类:

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; 

} 
+0

是的,你需要有一个空的构造函数让firebase数据类工作。此类也需要可序列化。 – srinivas