2016-01-19 52 views
3
{ 
    "users": { 
    "mchen": { 
     "friends": { "brinchen": true }, 
     "name": "Mary Chen", 
     "widgets": { "one": true, "three": true } 
    }, 
    "brinchen": { ... }, 
    "hmadi": { ... } 
    } 
} 

如何爲上面的示例編寫自定義對象類? Firebase中的指南僅顯示簡單示例。Firebase到自定義Java對象

回答

9

像往常一樣,你需要從JSON每個屬性映射到一個字段+吸氣的Java類:

static class User { 
    String name; 
    Map<String, Boolean> friends; 
    Map<String, Boolean> widgets; 

    public User() { } 

    public String getName() { return name; } 
    public Map<String, Boolean> getFriends() { return friends; } 
    public Map<String, Boolean> getWidgets() { return widgets; } 

    @Override 
    public String toString() { 
     return "User{" + 
       "name='" + name + '\'' + 
       ", friends=" + friends + 
       ", widgets=" + widgets + 
       '}'; 
    } 
} 

我真的只是跟着從Firebase guide on reading data on Android這些指令:

我們」將創建一個代表博客文章的Java類。像上次一樣,我們必須確保我們的字段名稱與Firebase數據庫中的屬性名稱相匹配,併爲該類提供默認的無參數構造函數。

然後你就可以加載像這樣的信息:

Firebase ref = new Firebase("https://stackoverflow.firebaseio.com/34882779/users"); 
ref.addListenerForSingleValueEvent(new ValueEventListenerBase() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 
      System.out.println(userSnapshot.getKey()+": "+userSnapshot.getValue(User.class)); 
     } 
    } 
}); 

有了這個輸出:

brinchen:用戶{名= '布林陳',朋友= {mchen =真, hmadi = true},widgets = {one = true,three = true,two = true}}

hmadi:User {name ='Horace Madi',friends = {brinchen = true},widgets = {one = true ,two = true}}

mchen:用戶{名= '瑪麗陳',朋友= {brinchen =真},窗口小部件= {一個= TRUE,三=真}}

+0

非常感謝您的詳細解釋,你能不能請進一步解釋爲什麼我們需要重寫toString()?是否因爲對象包含具有列表的子項?我是初學者,感謝您的解釋。以前我認爲需要使用它來包含一個列表。 '列表<地圖<字符串,布爾>>朋友'然後我沒有綁定到輸入錯誤。 –

+1

不需要重寫'toString()',只是它使得日誌輸出更具可讀性。下一次當你有代碼不起作用時:在你的問題中發佈代碼。它會減少下/收票。 –

+0

好的指出,謝謝你的建議:) –