我有一个 Android 项目,其数据库位于 Firebase 上。在某些时候,我需要获取所有年龄等于某个给定年龄的人的姓名。所以这是我的代码:
peopleRef.orderByChild("age").equalTo(age).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String name = dataSnapshot.child("name").getValue().toString();
nameArray.add(name);
//showNames();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
将名称放入数组后,我需要在另一个名为 showNames() 的函数中使用此数组。但是由于 Firebase 数据库的异步特性,我无法访问 onChildAdded 之外的数组。问题是,当所有名称都添加到数组时,我只需要调用一次 showNames() 。我如何才能知道查询何时访问了所有人并完成向数组中添加姓名,以便调用 showNames()?
最佳答案
您可以改用 ValueEventListener
并遍历子项,将它们添加到数组中:
peopleRef.orderByChild("age").equalTo(age).addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot : snapshot.getChildren())
{
String name = dataSnapshot.child("name").getValue().toString();
nameArray.add(name);
}
showNames();
}
});
关于java - 从 Firebase 数据库读取数据时,如何知道访问的每个查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971916/