Ребенок, которого я хотел зациклить, находится в массиве '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) {
}
});
}