获取子级firebase android的数量,并将所有子级放入String arrayList

时间:2018-10-16 12:26:38

标签: android firebase arraylist firebase-realtime-database

我的孩子列表截图

My Child List Screenshot

我需要获取孩子的数量(那里没有嵌套的孩子!)并将其存储在全局公共变量中。另外,我希望所有子项都放入字符串数组列表。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用某种形式的侦听器。对于单次查找,请使用valueEventListener。

然后在自动生成的OnDataChange()方法中。使用数据快照获取childrenCount,然后浏览孩子并将它们添加到列表中

List<String> list = new ArrayList<>();
long childrenCount;
public void getListItems()
{
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    ref.addValueEventListener(new ValueEventListener()
    {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
        {
            childrenCount = dataSnapshot.child("searchingUsers").getChildrenCount();
            for (DataSnapshot snap : dataSnapshot.child("searchingUsers").getChildren())
            {
                //If you want the node value
                list.add(snap.getValue().toString());

                //If you want the key value
                list.add(snap.getKey());
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            throw databaseError.toException(); // don't ignore errors
        }
    });
}

这会使两个变量在Activity中成为全局变量。这样您就可以从“活动”中的任何地方联系他们

答案 1 :(得分:0)

要获取所有这些随机值的列表,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference searchingUsersRef = rootRef.child("searchingUsers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String value = ds.getValue(String.class);
            list.add(value);
        }

        //Do what you need to do with your list
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
searchingUsersRef.addListenerForSingleValueEvent(valueEventListener);

如您所见,我仅在回调内部使用了该列表,如果您想在外部使用该列表,建议您从此 post 中查看anwser的最后一部分在其中,我解释了如何使用自定义回调来完成。您也可以查看此 video 以获得更好的理解。