2017-09-02 1 views
1

Wie im Titel angegeben, verwende ich die Firebase Realtime Database, mit Persistenz aktiviert.Firebase-Datenbank für Android - Ereignisse schreiben, wenn offline, Persistenz

Wie in der Anleitung angegeben, werden alle Daten

Durch Beharrlichkeit ermöglicht, dass die Datenbank-Client-Firebase Realtime synchronisieren würde, während eine Online-Festplatte weiterhin besteht und offline verfügbar ist, auch wenn der Benutzer oder das Betriebssystem die App startet . Dies bedeutet, dass Ihre App so funktioniert, wie sie online wäre, indem Sie die lokalen Daten verwenden, die im Cache gespeichert sind. Listener Callbacks werden weiterhin für lokale Updates ausgelöst.

Während dies geschieht mit dem ValueEventListeners und jedem las Zuhörer, ich kann nicht einen Weg finden, um es auch mit Schreiboperationen zu arbeiten. Dieses ist ein Ausschnitt aus meiner Datenbank Hilfsklasse:

DatabaseReference userRef = root.child("users").child(user.getUid()); 
    userRef.setValue(user).addOnSuccessListener(new OnSuccessListener<Void>() { 
     @Override 
     public void onSuccess(Void result) { 
      //handle success event 
     } 
    }).addOnFailureListener(new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception e) { 
      //handle failure event 
     } 
    }); 

Selbst mit Ausdauer aktiviert, die die Datenbank verhalten sich in einer „reaktiven Mode“ machen sollte, diese beiden Zuhörer nicht feuern, bis die Datenbank online geht wieder und schiebt schließlich die Updates auf den Server.

Dies ist nicht wirklich, was ich gehofft hatte, da ich erwartet hatte, dass das Ereignis ausgelöst wird, sobald die Daten lokal zwischengespeichert wurden. Ich weiß, ich könnte einfach die Ereignisse ignorieren und so tun, als wäre es gelungen, aber ich habe mich gefragt, ob ich etwas verpasst habe? Gibt es eine Möglichkeit, die Ereignisse auszulösen, sobald die Daten zwischengespeichert sind?

Antwort

1

Der Listener einer Schreiboperation wird ausgelöst, wenn die Daten in die Datenbank auf dem Server geschrieben werden.

Es gibt kein Ereignis, das ausgelöst wird, wenn die Daten in die lokale Warteschlange geschrieben wurden.

+0

In Ordnung, sieht so aus, als müsste ich vorgeben, dass es dann gelingt! Gibt es eine Problemumgehung, die ich verwenden kann, abgesehen vom Ignorieren des Ergebnisses? Ich habe versucht, den Verbindungsstatus vor dem Hinzufügen der Listener zu überprüfen, aber wenn ich die Verbindung verlieren, nachdem ich sie angeschlossen habe (und der Verbindungs-Listener dauert eine Weile, um den Zustand zu aktualisieren), wird es sich wie zuvor verhalten und warten, bis die Verbindung zurückkommt. Ich kann keinen Weg finden, diese Hörer ebenfalls zu entfernen. –

+0

Ich bin nicht sicher [was Sie erreichen möchten] ((http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem), weshalb ich antwortete, wie das System verhält. –