Use Firebase DB with local DB

前端 未结 2 803
走了就别回头了
走了就别回头了 2021-02-09 21:39

In my app I have SQLite db. I want to introduce sync between devices of my users. Firebase DB looks like an acceptable solution, but Firebase DB<

2条回答
  •  日久生厌
    2021-02-09 21:58

    If your firebase structure is not too complex you could also make a interface which defines methods like

    void addData(Data data);
    Data getData(long id);
    void editData(Data data, long id);
    void deleteData(long id);
    

    then create 2 classes implementing that interface, one using Firebase the other using SQLite.

    DatabaseImplementation
    FirebaseImplementation
    

    Inside your Firebase implementation, you would publish the data like normal, and publish one new node to something like root/requestUpdate/userId/push/ and push would contain information on where you request an update, and what deviceId published it.

    Then have a ValueEventListener tied to that mentioned node, and if it gets a new child, have it look whether the deviceId is the same or not. If it is not, have the FirebaseImplementation getData using the information you got, and then use the DatabaseImplementation, to addData.

    That would make sure that whenever a change is made, any other logged in client will know to update its firebase. If the client is not online, the next time he will be online he will do it as ValueEventListener triggers when it is attached. Make sure to loop through all the requested updates to make sure all are made. Also store the push keys of any updates you did complete on a local database that way you dont end up updating more than once.

    Basically the firebase will always be up to date and store any changes a user made on a seperate node which is listened to by all clients.

    Obviously this solution still has many problems you would need to fix, like figuring out when to delete the requestUpdate node. Logically after every user has synced but how do you determine this? ...

    As for the first login, you would need to write a populateDatabaseFromFirebase() method which will do a whole lot of getDatas and addDatas. How you would do that will depend on how your DB looks. You then would store that the user has already logged in with SharedPreferences and the firebase UID.

    That all being said, this will only work if your firebase is pretty flat. If you have a complex database, then everything becomes much more complicated and entangled and then it might be worth looking into an external library.

提交回复
热议问题