Wenn Ihre Firebase-Struktur nicht zu komplex ist, können Sie auch eine Schnittstelle erstellen, die Methoden wie
definiertvoid addData(Data data);
Data getData(long id);
void editData(Data data, long id);
void deleteData(long id);
Erstellen Sie dann zwei Klassen, die diese Schnittstelle implementieren, eine mit Firebase und die andere mit SQLite.
DatabaseImplementation
FirebaseImplementation
Innerhalb Ihrer Firebase-Implementierung würden Sie die Daten wie gewohnt veröffentlichen und einen neuen Knoten in etwas wie root/requestUpdate/userId/push/
veröffentlichen und push würde Informationen über wo enthalten Sie ein Update anfordern und welche deviceId veröffentlicht.
Binden Sie dann einen ValueEventListener an diesen erwähnten Knoten, und wenn er ein neues untergeordnetes Element erhält, prüfen Sie, ob die deviceId dieselbe ist oder nicht. Wenn dies nicht der Fall ist, verwenden Sie die FirebaseImplementation getData Verwenden Sie die Informationen, die Sie erhalten haben, und verwenden Sie dann die Datenbankimplementierung , zu addData .
Dadurch würde sichergestellt, dass bei jeder Änderung jeder andere angemeldete Client weiß, dass er seine Firebase aktualisieren muss. Wenn der Client nicht online ist, wird er das nächste Mal, wenn er online ist, dies tun, da ValueEventListener beim Anhängen ausgelöst wird. Stellen Sie sicher, dass Sie alle angeforderten Aktualisierungen durchlaufen, um sicherzustellen, dass alle durchgeführt werden. Speichern Sie auch die Push-Keys aller durchgeführten Aktualisierungen in einer lokalen Datenbank, damit Sie am Ende nicht mehr als einmal aktualisieren.
Grundsätzlich ist die Firebase immer auf dem neuesten Stand und speichert alle Änderungen, die ein Benutzer vorgenommen hat, auf einem separaten Knoten, auf den alle Clients hören.
Offensichtlich hat diese Lösung noch viele Probleme, die Sie beheben müssten, wie zum Beispiel herauszufinden, wann der Knoten „requestUpdate“ gelöscht werden muss. Logischerweise nachdem jeder Benutzer synchronisiert hat, aber wie stellen Sie dies fest? ...
Wie bei der ersten Anmeldung müssten Sie ein populateDatabaseFromFirebase() schreiben Methode, die eine ganze Menge getDatas und addDatas macht. Wie Sie das tun würden, hängt davon ab, wie Ihre DB aussieht. Sie würden dann speichern, dass sich der Benutzer bereits mit SharedPreferences angemeldet hat und die UID der Firebase .
Abgesehen davon funktioniert dies nur, wenn Ihre Firebase ziemlich flach ist. Wenn Sie eine komplexe Datenbank haben, dann wird alles viel komplizierter und verworrener und dann könnte es sich lohnen, in eine externe Bibliothek zu schauen.