我在用户的手机中保留了一个简单数据库的本地副本。这样,该应用程序可以脱机使用。我想不时检查firebase服务器,如果有任何更改,请更新本地数据库。所以我需要知道Firebase数据库中指定位置的最后一次操作(插入,更新,删除等)。那可能吗?或者我应该实施自己的机制吗?
答案 0 :(得分:1)
Firebase数据库不存储执行CRUD operations
的时间戳等信息。因此,您需要使用自己的机制自行存储此类数据。因此,您需要为要跟踪的每个子项创建一个新字段,并在每次执行操作时更改TIMESTAMP
的值。最佳做法是将数据保存为TIMESTAMP
,如下所示:ServerValue.TIMESTAMP
。请注意,当您保存TIMESTAMP
时,您将保存为Map
,并且在检索时,您将其检索为long
。要设置TIMESTAMP
,请使用以下代码重新编写代码:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Map map = new HashMap();
map.put("time", ServerValue.TIMESTAMP);
ref.child("yourNode").updateChildren(map);
为了获得数据,我使用以下方法重新命令:
public static String getTimeDate(long timeStamp){
try{
DateFormat dateFormat = getDateTimeInstance();
Date netDate = (new Date(timeStamp));
return dateFormat.format(netDate);
} catch(Exception e) {
return "date";
}
}
答案 1 :(得分:0)
这是可能的,但你不应该
Firebase已具备离线功能,使用起来非常简单。是一个两步的过程:
在代码中,这样做是这样的:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
DatabaseReference scoresRef = FirebaseDatabase.getInstance().getReference("scores");
scoresRef.keepSynced(true);
使用有很大诱惑:
FirebaseDatabase.getInstance().getReference().keepSynced(true);
尝试通过同步根引用来保持所有内容同步不起作用,您必须具体,至少在1级父级。
恢复连接时的同步是自动的,用户必须打开应用程序,完美无缺。
现在,如果您仍然坚持这样做,那么您需要做的是设置ServeValue.TimeStamp
在上面提供的相同链接中,您可以找到如何设置服务器时间戳,这里是direct reference。
稍后您可以按时间戳排序,这里有更多detailed answer