Firebase在指定位置的上次操作时间

时间:2017-08-29 18:12:19

标签: android firebase firebase-realtime-database

我在用户的手机中保留了一个简单数据库的本地副本。这样,该应用程序可以脱机使用。我想不时检查firebase服务器,如果有任何更改,请更新本地数据库。所以我需要知道Firebase数据库中指定位置的最后一次操作(插入,更新,删除等)。那可能吗?或者我应该实施自己的机制吗?

2 个答案:

答案 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已具备离线功能,使用起来非常简单。是一个两步的过程:

  1. 上设置离线功能
  2. 设置您想要跟踪离线的内容
  3. 这是official documentation

    在代码中,这样做是这样的:

    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