强制数据与Android的firebase服务器同步

时间:2016-04-18 18:49:02

标签: android sqlite firebase android-sqlite firebase-realtime-database

我正在开发一款拥有sqlite数据库的Android应用。我想为数据库添加一些云服务和同一用户的多个设备的同步。将有登录机制,不同用户的数据会有所不同。同步仅适用于登录用户。对于其他人,数据将仅驻留在本地。

我发现firebase非常有趣,并开始添加它以进行同步。我无法用firebase完全替换sqlite,因为我需要为未登录的用户提供离线体验。

我为同步操作实现了syncadapter。我正在那里进行sqlite< - > firebase双向同步。

我使用firebase事务来避免来自多个设备的冲突。但是我读到firebase最初写在脱机数据库上并在稍后与服务器同步。这可能会导致事务失败,有时会导致数据不一致。此外,我认为在重新启动应用程序时不会维护交易。

如果有一个选项可以禁用firebase的离线功能,并且每个请求都会立即发送到服务器并成功完成或失败,我可以在此处正确实现同步。

那么有没有办法强制直接写入和读取服务器? 有没有更好的方法来确保跨多个设备的良好冲突处理? firebase不适合这个目的吗?

1 个答案:

答案 0 :(得分:0)

如果有人仍在寻找解决方案。

最初使用firebaseRef.addValueEventListener()时,它会从可用的缓存中加载数据,然后从服务器请求更新的数据。

为了检索最新的服务器端数据,我们确保用户已连接到Internet,并且还连接到了Firebase服务器数据库。

        DatabaseReference connectionRefrence;
        ValueEventListener connectionValueEventListener;

        connectionRefrence = FirebaseDatabase.getInstance().getReference(".info/connected");
        connectionValueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                boolean connected = dataSnapshot.getValue(Boolean.class);
                if (connected) {
                    printLog("connected");
                    // TODO :: Perform your operation here with live data

                } else {
                    printLog("not connected");
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                printLog("connection cancelled");

            }
        };

希望对您有帮助。