2016-09-23 101 views
2

我创建了一个ListView,它应该显示存在的Firebase用户的所有用户名。但现在我得到了问题,我不知道如何获得用户ID的孩子。当然,我可以用数据库中的ID创建一个数组,但如果有更多的人在应用程序中注册,它不会自动执行。那么你知道如何让所有的孩子从小孩那里?它看起来像这样Firebase获取子女孩的子女

Root 
    iadf09f08asd0fasd 
     Infos 
     Username: LeagueHans 
    i297f9pb2f92 
     Infos 
     Username: Julian 
    08bfbüqw0efü 
     Infos 
     Username: Markus 

从评论:

DatabaseReference root = FirebaseDatabase.getInstance().getReference(); 
root.child("Users")‌​.child(What to write here).child("Infos").child("Username"); 

我不知道如何获得用户ID(iadf09f08asd0fasd)作为孩子。

+0

'你正在创建的'Root'节点还是'fir-xxxxxx'的东西? –

+0

DatabaseReference root = FirebaseDatabase.getInstance()。getReference()。child(“Users”)。child(在这里写什么).child(“Infos”)。child(“Username”); 我不知道如何得到用户标识(iadf09f08asd0fasd)作为孩子 –

回答

0

尝试像这样...

的火力addValueEventListener将在每次只要你的数据库得到改变,以便用它来检索数据的时间得到触发。

mReference.child("Root").child("Infos").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

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

       YourModel mModel = eventSnapshot.getValue(YourModel.class); 
       Log.e("NAME " ,""+ mModel); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

请解释这对于未来的新手是否知道这会做什么 –

+0

在开始使用Firebase之前,如果您要使用Firebase,那么您应该知道所有它的方法和查询..阅读文档工作,没有你永远不会知道它是如何工作的。 –

+0

但新手不会确切知道你在做什么。你不能只给代码,如果你说的是正确的,那么每个答案应该是代码而不管标签,因为在你的情况下“他应该知道它的方法和查询”,这显然是不正确的。 –

2

当您在位置上运行查询时,您将立即得到该位置下的节点子集。你不能在那之下检索低级别的孩子。

因此,要么您将不得不检索所有数据,然后只处理用户名客户端或(最好)您需要更改您的数据模型以更好地适合您的用例。

仅使用用户名

root.child("Users")‌​.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) { 
     String username = snapshot.child("Infos/Username).getValue(String.class); 
    } 
    ... 

这是可行的,但是不仅仅意味着你需要,你获取更多的数据。这是Firebase建议您不要嵌套数据的许多原因之一,除非您始终需要将它们组合在一起。

另一种方法是:

使用符合您的用例的数据模型

我经常建议,在火力地堡您的应用程序的屏幕模型。所以,如果你想显示在您的应用程序的用户名列表,你应该在你的数据库用户名的列表:

Usernames 
    iadf09f08asd0fasd: "LeagueHans" 
    i297f9pb2f92: "Julian" 
    08bfbüqw0efü: "Markus" 

现在你可以只用用户名:

root.child("Usernamess")‌​.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) { 
     String username = snapshot.getValue(String.class); 
    } 
    ... 
+0

哇谢谢你! 但是你知道,如果我可以在FirebaseListAdapter第一种方法显示的用户名?由于它的字符串:/ –

+0

它会一直,如果你想共享你在这种情况下,适配器的帮助。 : - /但是,是的,你可以覆盖'parseSnapshot()'和刚刚返回用户名存在 - 类似(虽然不完全相同),给我在这里所做的:http://stackoverflow.com/a/34561726/209103 。 –