我在用户的手机中保留了一个简单数据库的本地副本 . 这样,该应用程序可以脱机使用 . 我想不时检查firebase服务器,如果有任何更改,请更新本地数据库 . 所以我需要知道Firebase数据库中指定位置的最后一次操作(插入,更新,删除等) . 那可能吗?或者我应该实现自己的机制?
这是可能的,但你不应该这样做
Firebase已经具有离线功能,使用起来非常简单 . 是一个两步的过程:
设置离线功能
设置您想要跟踪屁股离线的内容
这是official documentation
在代码中,这样做是这样的:
FirebaseDatabase.getInstance().setPersistenceEnabled(true); DatabaseReference scoresRef = FirebaseDatabase.getInstance().getReference("scores"); scoresRef.keepSynced(true);
使用有很大的诱惑:
FirebaseDatabase.getInstance().getReference().keepSynced(true);
尝试通过同步根引用来保持所有内容同步不起作用,您必须具体,至少在1级父级 .
恢复连接时的同步是自动的,用户必须打开应用程序,完美无瑕 .
现在,如果你仍然坚持这样做,那么你要做的就是设置 ServeValue.TimeStamp
ServeValue.TimeStamp
在上面提供的相同链接中,您可以找到如何设置服务器时间戳,这里是direct reference .
稍后您可以按时间戳排序,这里更多detailed answer
Firebase数据库不存储执行的 CRUD operations 的时间戳等信息 . 因此,您需要使用自己的机制自行存储此类数据 . 因此,您需要为要跟踪的每个子项创建一个新字段,并在每次执行操作时更改 TIMESTAMP 的值 . 最佳做法是将数据保存为 TIMESTAMP ,如下所示: ServerValue.TIMESTAMP . 请注意,当您保存 TIMESTAMP 时,您将保存为 Map ,并且在检索时,您将其作为 long 进行检索 . 要设置 TIMESTAMP ,我使用以下代码重新编程:
CRUD operations
TIMESTAMP
ServerValue.TIMESTAMP
Map
long
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已经具有离线功能,使用起来非常简单 . 是一个两步的过程:
设置离线功能
设置您想要跟踪屁股离线的内容
这是official documentation
在代码中,这样做是这样的:
使用有很大的诱惑:
尝试通过同步根引用来保持所有内容同步不起作用,您必须具体,至少在1级父级 .
恢复连接时的同步是自动的,用户必须打开应用程序,完美无瑕 .
现在,如果你仍然坚持这样做,那么你要做的就是设置
ServeValue.TimeStamp
在上面提供的相同链接中,您可以找到如何设置服务器时间戳,这里是direct reference .
稍后您可以按时间戳排序,这里更多detailed answer
Firebase数据库不存储执行的
CRUD operations
的时间戳等信息 . 因此,您需要使用自己的机制自行存储此类数据 . 因此,您需要为要跟踪的每个子项创建一个新字段,并在每次执行操作时更改TIMESTAMP
的值 . 最佳做法是将数据保存为TIMESTAMP
,如下所示:ServerValue.TIMESTAMP
. 请注意,当您保存TIMESTAMP
时,您将保存为Map
,并且在检索时,您将其作为long
进行检索 . 要设置TIMESTAMP
,我使用以下代码重新编程:为了获得数据,我使用以下方法重新编程: