如何在firebase数据库中获取所有孩子的数据?
Posted
技术标签:
【中文标题】如何在firebase数据库中获取所有孩子的数据?【英文标题】:How to get all child's data in firebase database? 【发布时间】:2016-12-22 06:53:56 【问题描述】:我有这个 firebase 数据库
我需要获取用户的所有电话号码,我应该使用哪个监听器来获取所有孩子?
每个用户都被添加为一个对象,用户 ID 作为该对象的名称,我需要在不知道该用户 ID 的情况下检索这些对象
我搜索了文档,它与DataSnapshot
相关,但没有听众我无法获得DataSnapshot
!寻求 DataSnapshout 是正确的还是我应该使用其他东西
【问题讨论】:
【参考方案1】: 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*/
【讨论】:
这么大的帮助!太感谢了! >3【参考方案2】:首先检索您的用户数据快照。
//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”列表的效率会高得多。
上面的代码已经在您的示例数据库上进行了测试,并且确实有效。但是,您的电话字段可能需要转换为 String 或 int,具体取决于您用户的电话实例字段的类型。
【讨论】:
感谢 allot,我将使用allPhoneNumbers
的密钥,这真是个好主意
太棒了。 firebase 的个人提示是在写入 firebase (setValue/updateChildren) 时做所有困难的事情,因为您可以更好地控制事情的编写方式。阅读时,您几乎无法控制,因为您必须使用异步侦听器获取节点下的所有内容。因此,通过在写入时组织数据,您可以更轻松地读取数据。
我正在尝试这个。好像比我的专业。以上是关于如何在firebase数据库中获取所有孩子的数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Firebase android kotlin 获取所有具有特定价值的孩子?
如何从 uid Firebase 数据库中获取电子邮件地址?