2016-01-19 48 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

好的指出,谢谢你的建议:) –