Ist es möglich, nur die untergeordneten Elemente abzurufen, die hinzugefügt/geändert wurden, nachdem das Wertereignislistener eingerichtet wurde? Aus meiner Erfahrung scheint es, jedes Kind zu holen.Nur geänderte Daten abrufen, nachdem ValueEventListener initiiert wurde
Zum Beispiel in einem Chat-basierte Anwendung, wenn ich die letzten 10 Nachrichten mit Abfrage als Initialisierungsschritt
FirebaseDatabase database = FirebaseDatabase.getInstance();
Query queryRef = database.getReference(MESSAGES)
.limitToLast(messagesToLoad);
queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Load then new chat message
ChatMessage message = dataSnapshot.getValue(ChatMessage.class);
if (message != null)
{
mMessageList.add(0, message);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Danach holen wollte, möchte ich ein ValueEvenListener
anschließen, die auf die Veränderungen zuhört.
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference(MESSAGES);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ChatMessage message = dataSnapshot.getValue(ChatMessage.class);
if (message != null) {
mMessageList.add(0, message);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
EDIT: ich zu einem childEventListener
für umgewandelt habe, wenn neue Nachrichten hinzugefügt werden, aber ich kann natürlich nicht, dass mit der einzigen ValueEventListener
Abfrage tun. Ich habe es auch angepasst, so dass sie jetzt die gleiche Datenbankreferenz verwenden (childEventListener
wird nur bei der Erstellung des Fragments aufgerufen), aber das scheint sich nicht viel zu ändern.
Dies ist nur um zu vermeiden, einen ganzen Heap von Daten ohne Grund zu holen.
Haben Sie dieses Problem gelöst? Ich habe ein ähnliches Problem wie Ihres und nicht sicher, was zu tun ist. –