我正在开发一款拥有sqlite数据库的Android应用。我想为数据库添加一些云服务和同一用户的多个设备的同步。将有登录机制,不同用户的数据会有所不同。同步仅适用于登录用户。对于其他人,数据将仅驻留在本地。
我发现firebase非常有趣,并开始添加它以进行同步。我无法用firebase完全替换sqlite,因为我需要为未登录的用户提供离线体验。
我为同步操作实现了syncadapter。我正在那里进行sqlite< - > firebase双向同步。
我使用firebase事务来避免来自多个设备的冲突。但是我读到firebase最初写在脱机数据库上并在稍后与服务器同步。这可能会导致事务失败,有时会导致数据不一致。此外,我认为在重新启动应用程序时不会维护交易。
如果有一个选项可以禁用firebase的离线功能,并且每个请求都会立即发送到服务器并成功完成或失败,我可以在此处正确实现同步。
那么有没有办法强制直接写入和读取服务器? 有没有更好的方法来确保跨多个设备的良好冲突处理? firebase不适合这个目的吗?
答案 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");
}
};
希望对您有帮助。