firebase实时存储从所有孩子获得特定值

时间:2018-03-24 12:28:26

标签: android listview firebase firebase-realtime-database

我正在使用需要管理页面的firebase构建应用程序,在其中我想列出系统中注册的用户的所有用户名,我正在使用此代码:

    Usernames = new ArrayList<>();
    usersdb = FirebaseDatabase.getInstance().getReference().child("Users");
    usersdb.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot user:dataSnapshot.getChildren()) {
                Usernames.add(user.child("username").getValue().toString());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    adp = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,Usernames);
    lv.setAdapter(adp);

由于某种原因,列表视图中没有显示任何人知道为什么?

我的数据结构如下所示:(随机字母是用户uid)

Users
----sdfbsif
-----------email
-----------username
-----------password
----djgsvnv
-----------email
-----------username
-----------password

1 个答案:

答案 0 :(得分:0)

您在侦听器提供数据之前调用setAdapter()。 addValueEventListener是异步的并立即返回,这意味着您将空列表传递给适配器。在整个代码中放置日志消息,以查看它正在执行的顺序。

相反,您可以在快照中的所有数据都可用后在回调中调用setAdapter。