Android Firebase获取childlist的子级

Android Firebase获取childlist的子级,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我已经创建了一个ListView,其中应该显示存在的firebase用户的所有用户名。但是现在我遇到了一个问题,我不知道如何获取用户ID的子项。当然我可以用数据库中的ID创建一个数组,但是如果有更多的人注册这个应用程序,它不会自动完成。那么你知道如何从一个孩子那里得到所有的孩子吗?看起来像这样 Root iadf09f08asd0fasd Infos Username: LeagueHans i297f9pb2f92 Infos

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

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
)。

像这样试试

每当数据库发生更改时,firebase
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) {

        }
    });

当您在某个位置上运行查询时,您将获得该位置下的一个子集节点。您无法检索该下较低级别的子项

因此,要么您必须检索所有数据,然后只在客户端处理用户名,要么(最好)您需要更改数据模型以更好地适应您的用例

仅使用用户名 这将起作用,但意味着您检索的数据比您需要的要多。这是Firebase建议不要嵌套数据的众多原因之一,除非您总是需要将数据组合在一起

另一种选择是:

使用与您的用例匹配的数据模型 我经常建议您在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);
    }
    ...

您正在创建的
Root
节点或类似于
fir-xxxxxx
?DatabaseReference Root=FirebaseDatabase.getInstance().getReference().child(“用户”).child(在这里写什么)。child(“信息”).child(“用户名”);我不知道如何获得用户ID(iadf09f08asd0fasd)作为一个孩子,请解释这是做什么,让未来的新手知道这是做什么在开始使用firebase之前,如果你要使用firebase,那么你应该知道它的所有方法和查询。。阅读文档,否则你永远不会知道它是如何工作的。但是新手不会确切知道你在做什么。你不能只给出代码,如果你说的是正确的,那么每个答案都应该是代码,不管标签是什么,因为在你的情况下,“他应该知道它的方法和查询”,这显然是不正确的。它仍然缺少信息。我有权鼓励你修正你的答案,我有权保留我的反对票,直到它得到改进。我不想要一个事件监听器。我想知道当你开始活动时,我如何显示所有用户的孩子。哇,谢谢!但是您知道我是否可以在FirebaseListAdapter中显示第一个方法中的用户名吗?因为它是一个字符串:/n如果您在这种情况下共享适配器,它会有所帮助。:/但是是的,您可以覆盖
parseSnapshot()
,然后在那里返回用户名-与我在这里所做的类似(尽管不完全相同):。
root.child("Usernamess")‌​.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
        String username = snapshot.getValue(String.class);
    }
    ...