5

我想使用 Firebase 提供的服务器时间戳设置孩子的优先级,ServerValue.TIMESTAMP

mFirebaseref.child(userid).setPriority(ServerValue.TIMESTAMP);

但我的情况是相反的。我想设置负数ServerValue.TIMESTAMP以根据时间将我的孩子移到顶部。是否可以在不使用本地时间戳的情况下在 Firebase 中执行此操作System.CurrentTimeInMillis()

我想做这样的事情:

mFirebaseref.child(userid).setPriority(-ServerValue.TIMESTAMP);
4

2 回答 2

3

在客户端,ServerValue.TIMESTAMP是一个结构如下的对象:{.sv: "timestamp"}

所以,如你所知,你不能轻易地做你想做的事。但是,可能有不同的解决方案。例如,如果您想要五个最近的条目,您仍然可以通过以下方式设置优先级ServerValue.TIMESTAMP

mFirebaseref.child(userid).setPriority(ServerValue.TIMESTAMP);

然后使用limitToLast()方法:

Query queryRef = mFirebaseref.limitToLast(5);

获取最近的五个条目。

此外,这可能会有所帮助:按发布的降序显示帖子

于 2015-04-09T19:09:05.173 回答
3

您基本上是在问如何获得负服务器时间戳,它应该可以离线工作。我找到了一种方法,您可以使用一个隐藏字段。来自文档的片段:

Firebase offsetRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/serverTimeOffset");
offsetRef.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    double offset = snapshot.getValue(Double.class);
    double estimatedServerTimeMs = System.currentTimeMillis() + offset;
  }

  @Override
  public void onCancelled(FirebaseError error) {
    System.err.println("Listener was cancelled");
  }
});
于 2016-04-20T17:31:19.580 回答