Огненная база Android Цикл по дочернему элементу с помощью addListenerForSingleValueEvent - PullRequest
0 голосов
/ 20 апреля 2019

Ребенок, которого я хотел зациклить, находится в массиве 'userid'. Я пытаюсь получить значение и сохранить его в списке под названием «телефон»

Когда выбирается последнее дочернее значение, я вызывал метод fetchdata () для продолжения. Я проверил, извлекает ли цикл последнее значение, используя условие

'finalI == userid.size () - 1'.

Я хочу, чтобы значение ' finalI ' печаталось в последовательности, чтобы, когда цикл находился в конце итерации, я мог продолжить, но когда я напечатал ' finalI 'ценность, это не входит в организованную манеру. Это печатает как,

iValue - 0
iValue - 5
iValue - 1
iValue - 2
iValue - 3
iValue - 4

Когда я отлаживаю код, он выполняется в упорядоченной последовательности. Но в обычных случаях значение 'finalI' печатается как указано выше. Поскольку ' finalI = 5 ', условие становится истинным, и ' fetchdata ' выполняется еще до завершения цикла for. Я реализовал подобную концепцию в своем проекте, но проблема возникает только в этом конкретном коде. Я вижу, что проблема в том, что это из-за асинхронной задачи, но как быть уверенным, когда поток собирается завершить выполнение в случае цикла 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) {

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