繁体   English   中英

Firebase:dataSnapshot 上的循环仅执行一次

[英]Firebase: Loop on dataSnapshot executes only once

以下是我的Firebase 数据库图:

在此处输入图像描述

根元素links三个子元素。 当我执行以下循环以获取所有孩子时,它仅返回第一个孩子的结果

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("links");
        int count=0;


        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {


            Log.d("Firebase","Children: "+dataSnapshot.getChildren().toString());    //This gives result for all children

                for (DataSnapshot ds : dataSnapshot.getChildren()) {

                    count++;
                }
                Log.d("Firebase","Count length: "+count);     //Gives only "1"
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("The read failed: " + databaseError.getCode());
            }
        });

在上面的代码中, count应该是 3,但它返回 1。循环只执行一次。 但是,上面代码中的以下行正常工作,并为所有 3 个孩子提供了结果。

Log.d("Firebase","Children: "+dataSnapshot.getChildren().toString());

问题出在哪里? 感谢您的回答!

如果要获取links下的子项数量,请尝试以下操作:

ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.d("Firebase","Children: "+dataSnapshot.getChildren().toString()); //This gives result for all children
        long childCount = dataSnapshot.getChildrenCount();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        System.out.println("The read failed: " + databaseError.getCode());
    }
});

getChildrenCount()将返回links下的直接子节点数,在本例中为3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM