2016-06-29 8 views
0

Bei jedem Start meiner App erhalte ich die gleichen "onChildAdded" Aktionen. Also meine App denkt, dieses Kind wurde kürzlich hinzugefügt. Aber sie sind von Anfang an in der Datenbank. Also wenn ich meine App schließe und neu starte, erhalte ich diese Aktionen erneut. Jedes Mal.onChildAdded wird bei jedem App-Start ausgelöst, aber keine neuen Einträge in der Datenbank

Ich nenne auch

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

in meiner Anwendungsklasse.

Wie kann ich dieses Problem lösen, so dass die Listener wirklich nur aufgerufen werden, wenn neue Daten zur Datenbank hinzugefügt wurden?

Antwort

0

Sie können once('child_added') oder once('value') Methode verwenden, um alle Dateneinträge von Feuerbasis zu erhalten, wenn Ihr App beginnt. Dann speichern sie lokal zu einer Variablen. Und danach abonnieren Sie die Veranstaltung. Wenn es ausgelöst wird, überprüfen Sie zunächst, ob dieses Kind bereits bekannt ist. Wenn nicht - tun Sie Aktionen, die Sie brauchen.

2

Der einfachste Weg, dies zu tun, ist, den Schlüssel des neuesten Artikels zu behalten, den der Benutzer im lokalen Speicher gesehen hat (z.B. SharedPreferences). Dann, wenn Sie die Aktivität wieder von vorn anfangen, an diesem Schlüssel starten:

String lastSeenKey = sharedPreferences.getString("lastSeenKey", "-"); 
ref.orderByKey(). 
    .startAt(lastSeenKey) 
    .addChildEventListener(... 

Und dann in onChildAdded() stellen Sie sicher, dass Sie den neuesten Schlüssel in den gemeinsamen Einstellungen speichern.

+0

Hört sich gut an, aber warum sagt Firebase meiner App, dass es einen neuen Eintrag gibt, wenn es keinen neuen Eintrag gibt? – Zoker

+0

Und ich bekomme keine Updates für die bereits hinzugefügten Veranstaltungen, oder? – Zoker

+0

Es ist nur wie die API definiert ist. 'ChildAdded' wird sofort für jedes existierende Kind und dann für jedes neue Kind, das danach hinzugefügt wird, aufgerufen. –

Verwandte Themen