首页 文章

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

提问于
浏览
0

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

2 回答

  • 0

    这是可能的,但你不应该这样做

    Firebase已经具有离线功能,使用起来非常简单 . 是一个两步的过程:

    • 设置离线功能

    • 设置您想要跟踪屁股离线的内容

    这是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

  • 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";
        }
    }
    

相关问题