Данные загружаются из Firebase асинхронно.Пока данные загружаются, основной поток продолжает выполнять основной код.Затем, когда данные загружены, вызывается ваш метод onDataChanged
.
Все это означает, что в этом случае вы не можете войти в onDataChange
с помощью отладчика.
Давайте быстропосмотрите, что это значит в отладчике.Я пронумеровал самые важные строки:
/* 1 */ dbuser = FirebaseDatabase.getInstance().getReference("Passanger");
/* 2 */ dbuser.addListenerForSingleValueEvent(new ValueEventListener() {
/* 3 */ @Override
/* 4 */ public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
/* 5 */ for (DataSnapshot datas : dataSnapshot.getChildren()) {
/* 6 */ String dbmobileno = datas.child("mobileno").getValue().toString();
...
/* 7 */ public void onCancelled(@NonNull DatabaseError databaseError) {
/* 8 */ }
/* 9 */ });
/*10 */ System.out.println("Got here");
Если вы находитесь в отладчике, который остановлен на строке 1
, и вы указываете ему перейти к следующему утверждению, оно перейдет к строке 2
.Пока все хорошо, поскольку это, вероятно, то, чего мы все ожидали.
Если вы затем из строки 2
скажете отладчику перейти к следующему оператору, он перейдет к строке 10
.Причина в том, что строка 2 запускает асинхронную операцию, выполнение которой займет некоторое время.Таким образом, отладчик продолжает оператор после асинхронного вспомогательного класса, который находится в строке 10
.
Если вы хотите увидеть, вызывается ли onDataChange
, вам нужно установитьточка останова на первой строке внутри этого метода, поэтому строка 5
в этом случае.Как только отладчик достигнет этой точки останова, вы можете продолжить выполнение этого метода с помощью обычной инструкции «следующий оператор».