Firebase: цикл на dataSnapshot выполняется только один раз - PullRequest
0 голосов
/ 04 ноября 2019

Ниже приведена моя база данных Firebase график:

enter image description here

Есть три детей изкорневой элемент ссылки . Когда я выполняю следующий цикл, чтобы получить все дочерние элементы, он возвращает результат только для первого дочернего элемента

        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());

В чем проблема? Спасибо за ваши ответы!

1 Ответ

1 голос
/ 04 ноября 2019

Если вы хотите получить число детей в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...