【问题标题】:Firebase last action time in specified locationFirebase 在指定位置的上次操作时间
【发布时间】:2017-08-29 18:12:18
【问题描述】:

我在用户的手机中保留了一个简单数据库的本地副本。这样应用程序就可以离线使用。我想不时检查firebase服务器并更新本地数据库是否有任何变化。所以我需要知道 Firebase 数据库中指定位置的最后一次操作(插入、更新、删除等)时间。那可能吗?还是我应该实现自己的机制?

【问题讨论】:

  • 为什么需要知道这些动作的时间?
  • Firebase 不会自动跟踪此类数据。另请参阅我几个小时前在这里给出的答案:stackoverflow.com/questions/45934119/…
  • @AlexMamo,我正在寻找一种方法来检测是否有任何更改,如果有,请检索整个路径/表或仅检索更改。
  • 嗯,最好还是坚持 Firebase 的离线功能,谢谢。

标签: android firebase firebase-realtime-database


【解决方案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";
    }
}

【讨论】:

    【解决方案2】:

    这是可能的,但你不应该

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

    1. 设置离线功能
    2. 设置您想要离线跟踪的内容

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

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多