java - For 循环未完全运行

标签 java firebase for-loop firebase-realtime-database android-recyclerview

每次我运行此代码时 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/

相关文章:

swift - iOS - 将字符串转换为 double

c++ - 计算字符串 C++ 中出现的次数?

java - 如何从 int 数组中随机选择,然后删除所选元素

java - 派生类可以调用它们的抽象父类的构造函数,调用它们尚未实现的方法吗?

java - Flowable:CMMN 建模器转换 CasePlanModel 时出错

firebase - 在firestore中高效匹配玩家

ios - 无法将 CLLocationDegrees 的值转换为预期参数 shopProperties

C++ 如何将十进制数转换为二进制数?

java - 传递 InsertProvider mybatis-annotation 列表 - 非法参数异常

java数据结构可以容纳不同类型的元素