Android Firebase嵌套循环等待完成
我有嵌套循环,类似于:Android Firebase嵌套循环等待完成,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有嵌套循环,类似于: ... @Override public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot d : dataSnapshot.getChildren()){ ... @Override public void onDataChange(DataSnapshot dataSnapshot) { write
...
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot d : dataSnapshot.getChildren()){
...
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
writeMessage("hello");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
writeMessage("bye");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
我希望for循环完成并打印“hello”5次(例如),然后才打印!继续并打印“再见”消息。
我试图搜索类似的主题,但找不到任何关于如何实现它的答案,希望您能帮助我
谢谢问题在于每个
DataSnapshot
都在一个线程上运行,例如:如果DataSnapshot.getChildren()
等于5,那么您创建的嵌套循环将生成6个线程:一个用于外部onDataChange()
而另一个用于内部onDataChange()
。所以,如果您想在最后一行打印“bye”,您应该同步计算内部onDataChange()
。下面的代码尚未测试
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
count = 0;
final int target = number_of_children_in_dataSnapshot;
for(DataSnapshot d : dataSnapshot.getChildren()){
...
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
writeMessage("hello", target);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
Integer count = 0;
private synchronized void writeMessage(String message, int target) {
count++;
if (count == target) {
// do write bye
return;
}
// do write message
}
显然类似于此:在onDataChange中,如果计数器==5(例如),则写消息(“bye”);虽然没有看到真正的嵌套循环,但我看到了一个循环。可能在
onDataChange
之前,您是否为侦听器签名?因此,只有当数据发生实际更改时才会调用该函数。所以要么移动writeMessage(“hello”)
在onDataChange
方法之外,或者显示更多的codeSelvin的方法可能是您想要的。但除此之外:除非你真的发布了一个真实的答案,否则很难给你有用的代码作为答案。现在,无法理解内部的onDataChange()
和外部的onDataChange()
是如何关联的(因此如何确定循环的退出条件)。谢谢,我希望将来firebase会给我们提供跟踪查询完成的选项