如何获取firebase数据库中的所有孩子的数据?

我有这个firebase数据库

在这里输入图像说明

我需要得到所有用户的电话号码,我应该使用哪一个听众来获得所有的孩子?

每个用户都添加为一个对象与用户ID作为该对象的名称,我需要检索这个对象,而不知道用户的ID

我search了文档,它与DataSnapshot有关,但是如果没有监听器,我无法获得DataSnapshot ! 寻求DataSnapshout是否正确,或者我应该使用别的东西

Solutions Collecting From Web of "如何获取firebase数据库中的所有孩子的数据?"

首先检索您的用户数据快照。

 //Get datasnapshot at your "users" root node DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users"); ref.addListenerForSingleValueEvent( new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { //Get map of users in datasnapshot collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue()); } @Override public void onCancelled(DatabaseError databaseError) { //handle databaseError } }); 

然后循环访问用户,访问他们的地图并收集电话字段。

 private void collectPhoneNumbers(Map<String,Object> users) { ArrayList<Long> phoneNumbers = new ArrayList<>(); //iterate through each user, ignoring their UID for (Map.Entry<String, Object> entry : users.entrySet()){ //Get user map Map singleUser = (Map) entry.getValue(); //Get phone field and append to list phoneNumbers.add((Long) singleUser.get("phone")); } System.out.println(phoneNumbers.toString()); } 

这个监听器在显式调用时只会检索数据快照。 除了用户节点之外,请考虑在“allPhoneNumbers”节点下存储一个数字列表。 这将使您的数据快照收集所有数字时更轻,更容易处理。 如果说有数百个用户,那么“用户”数据快照会过大,“allPhoneNumbers”列表将会更有效率。

上面的代码已经在您的示例数据库上进行了testing,可以正常工 但是,根据用户的电话实例字段的types,您的电话字段可能需要转换为string或整型。

  DatabaseReference ref1= FirebaseDatabase.getInstance().getReference(); DatabaseReference ref2,ref3,ref4; ref2 = ref1.child("User"); ref2.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Userlist = new ArrayList<String>(); // Result will be holded Here for (DataSnapshot dsp : dataSnapshot.getChildren()) { Userlist.add(String.valueOf(dsp.geValue())); //add result into array list } /* userlist will store all values of users, then point to every userlist item and get mobile numbers*/