我有这个火力点数据库如何在Firebase数据库中获取所有孩子的数据?
,我需要得到所有用户的电话号码,这听者应我用它来获取所有CHILDES?
每一个用户被添加作为具有用户ID的对象为对象的名字,我需要检索这个对象不知道用户ID
我搜索的文件,它涉及到DataSnapshot
但我不能如果没有听众,你会得到一个DataSnapshot
!是否正确寻找DataSnapshout或我应该使用其他方法
我有这个火力点数据库如何在Firebase数据库中获取所有孩子的数据?
,我需要得到所有用户的电话号码,这听者应我用它来获取所有CHILDES?
每一个用户被添加作为具有用户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”列表将更有效率。
上述代码已在您的示例数据库上进行了测试,并且可以正常工作。但是,根据用户的电话实例字段的类型,您的电话字段可能需要转换为字符串或整数。
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*/
感谢分配,你说的很清楚 – mxml
感谢allot,我将使用'allPhoneNumbers'的一个键,这真的是个好主意 – mxml
真棒。在写入firebase(setValue/updateChildren)时,使用Firebase的个人提示会完成所有困难的工作,因为您可以更好地控制写入内容的方式。阅读时,您几乎不能控制,因为您必须抓取具有异步侦听器的节点下的所有内容。因此,通过在撰写时组织数据,您可以更轻松地读取数据。 –