Ако вашата firebase структура не е твърде сложна, можете също да направите интерфейс, който дефинира методи като
void addData(Data data);
Data getData(long id);
void editData(Data data, long id);
void deleteData(long id);
след това създайте 2 класа, внедряващи този интерфейс, като единият използва Firebase, другият използва SQLite.
DatabaseImplementation
FirebaseImplementation
Във вашата реализация на Firebase бихте публикували данните като нормално и бихте публикували един нов възел в нещо като root/requestUpdate/userId/push/
и push ще съдържа информация за къде поискате актуализация и какъв deviceId публикува.
След това свържете ValueEventListener към споменатия възел и ако получи ново дъщерно, накарайте го да провери дали deviceId е същият или не. Ако не е, имайте FirebaseImplementation getData като използвате информацията, която сте получили, и след това използвайте DatabaseImplementation , за да добавите данни .
Това ще гарантира, че когато се направи промяна, всеки друг влязъл клиент ще знае да актуализира своята firebase. Ако клиентът не е онлайн, следващия път, когато ще бъде онлайн, той ще го направи, тъй като ValueEventListener се задейства, когато е прикачен. Не забравяйте да прегледате всички поискани актуализации, за да сте сигурни, че всички са направени. Също така съхранявайте бутоните за натискане на всички актуализации, които сте извършили, в локална база данни, така че в крайна сметка да не актуализирате повече от веднъж.
По принцип firebase винаги ще бъде актуален и ще съхранява всички промени, направени от потребител, на отделен възел, който се слуша от всички клиенти.
Очевидно това решение все още има много проблеми, които ще трябва да поправите, като например да разберете кога да изтриете възела requestUpdate. Логично, след като всеки потребител се синхронизира, но как да определите това? ...
Що се отнася до първото влизане, ще трябва да напишете populateDatabaseFromFirebase() метод, който ще направи много getDatas и addDatas. Как ще направите това ще зависи от това как изглежда вашата DB. След това ще съхраните, че потребителят вече е влязъл с SharedPreferences и UID на firebase .
Като се има предвид всичко това, това ще работи само ако вашата пожарна база е доста плоска. Ако имате сложна база данни, тогава всичко става много по-сложно и заплетено и тогава може да си струва да разгледате външна библиотека.