2015-10-08 94 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