Android Firebase使用addListenerForSingleValueEvent遍历子级

时间:2019-04-20 07:09:58

标签: android firebase firebase-realtime-database

我要循环通过的孩子在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) {

            }
        });
    }

0 个答案:

没有答案