每次我运行此代码时 for
循环在随机次数的迭代后停止,但不是 100 次。如果我注释掉从 firebase 检索数据的部分, for
循环完全运行。我可以知道循环在中间停止的原因吗?
firstslot = new ArrayList<>();
for (i =1; i<=100; i++)
{
final String string = String.valueOf(i);
reference.child(string)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("name")) && (dataSnapshot.hasChild("age"))) {
String check = "BOOKED";
item = new book(string, deptid, date, check, Color.CYAN);
firstslot.add(item);
} else {
String check = "";
item = new book(string, deptid, date, check, Color.TRANSPARENT);
firstslot.add(item);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
RecyclerView myrv = findViewById(R.id.booksrecyclerview);
bookadapter myadapter = new bookadapter(this, firstslot);
myrv.setLayoutManager(new GridLayoutManager(this, 5));
myrv.setAdapter(myadapter);
}
最佳答案
混契约(Contract)步和异步执行会导致这种情况 - 除非理解这个基本条件,否则您可能会遇到困难。使用回调来指示,每当查询完成时...同步 for
循环不会切断它,因为它会创建竞争条件。
想一想,它是一个 100 个 AsyncTask
。
关于java - For 循环未完全运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57604893/