我有嵌套循环,类似于:
...
@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次(例如)然后才开始!继续并打印“再见”消息。 我试图搜索类似的主题,但找不到任何关于如何实现它的答案,希望你能帮助我。
由于
答案 0 :(得分:1)
问题是每个DataSnapshot
在一个线程上运行,例如:如果dataSnapshot.getChildren()
等于5,那么您创建的嵌套循环将生成6个线程:一个用于外部onDataChange()
和另一个为5内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
}