Ответ 1
Существует общий способ обнаружения, когда Firebase выполняется синхронизация исходных данных в определенном месте. Этот подход использует один из Firebase event:
События события всегда запускаются последними и гарантированно содержат обновления от любых других событий, которые произошли до того, как был сделан снимок.
Итак, если у вас есть как ValueEventListener
, так и ChildEventListener
в определенном месте, ValueEventListener.onDataChange()
гарантированно будет вызван после того, как все вызовы onChildAdded()
произойдут. Вы можете использовать это, чтобы знать, когда начальная загрузка данных выполнена:
ref.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("We're done loading the initial "+dataSnapshot.getChildrenCount()+" items");
}
public void onCancelled(FirebaseError firebaseError) { }
});
ref.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
System.out.println("Add "+dataSnapshot.getKey()+" to UI after "+previousKey);
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(FirebaseError firebaseError) { }
});
В моем тестовом прогоне это приводит к:
Add -K2WLjgH0es40OGWp6Ln to UI after null
Add -K2YyDkM4lUotI12OnOs to UI after -K2WLjgH0es40OGWp6Ln
Add -K2YyG4ScQMuRDoFogA9 to UI after -K2YyDkM4lUotI12OnOs
...
Add -K4BPqs_cdj5SwARoluP to UI after -K4A0zkyITWOrxI9-2On
Add -K4BaozoJDUsDP_X2sUu to UI after -K4BPqs_cdj5SwARoluP
Add -K4uCQDYR0k05Xqyj6jI to UI after -K4BaozoJDUsDP_X2sUu
We're done loading the initial 121 items
Таким образом, вы можете использовать событие onDataChanged()
, чтобы скрыть индикатор выполнения.
Но нужно иметь в виду: Firebase не просто загружает данные. Он непрерывно синхронизирует данные с сервера всем подключенным клиентам. Таким образом, на самом деле нет моментального момента, когда данные будут полностью восстановлены.