我有这个 firebase 数据库
我需要获取用户的所有电话号码,我应该使用哪个侦听器来获取所有孩子?
每个用户都作为一个对象添加,其中用户 ID 作为该对象的名称,我需要在不知道用户 ID 的情况下检索该对象
我搜索了文档,它与DataSnapshot
但我无法得到DataSnapshot
没有听众!寻求 DataSnapshout 是否正确,或者我应该使用其他东西
首先检索您的用户数据快照。
//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,具体取决于用户的电话实例字段的类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)