我要循环通过的孩子在arraylist'userid'中。我正在尝试获取值并将其存储在名为“ phone”的列表中
当获取最后一个子值时,我调用了方法'fetchdata()'进行下一步。我检查了循环是否使用条件
获取了最后一个值'finalI == userid.size()-1'。
我希望按顺序打印' finalI '值,以便当循环在迭代结束时,我可以继续进行操作,但是当我打印' finalI < / strong>的值,它不是有序的。像这样打印
iValue - 0
iValue - 5
iValue - 1
iValue - 2
iValue - 3
iValue - 4
当我调试代码时,它按顺序执行。但是在正常情况下,“ finalI”值的打印方式与上面相同。由于' finalI = 5 ',条件变为true,并且甚至在完成'for循环'之前就执行' fetchdata ”。我在整个项目中都实现了类似的概念,但问题仅在此特定代码中出现。 我可以看到问题是因为它是由于asynctask引起的,但是如何确定线程在“ for循环”情况下何时完成执行?我在这里做错什么了吗?提前致谢。
for (int i = 0; i < userid.size(); i++) {
final int finalI = i;
dbUserRegDetails.child(userid.get(i)).child("Mobile").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try {
phone.add(dataSnapshot.getValue().toString());
Log.d("iValue", "" + finalI);
if (finalI == userid.size()-1) {
fetchdata();
}
} catch (Exception e) {
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}