我想模拟以下内容,以从Firebase侦听器中排除初始数据,但使用Java进行。

var ref = new Firebase('https://<your instance>.firebaseio.com/messages');

var queryRef = ref.orderBy('created').startAt(Firebase.ServerValue.TIMESTAMP);

queryRef.on('child_added', function(snap) {
  console.log(snap.val());
});


似乎没有.startAt()的签名将ServerValue.TIMESTAMP(Java SDK中的Map)作为参数。在Java中是否根本不可能进行此查询(使用Firebase服务器时间戳)?

最佳答案

API doc says startAt()可以采用StringString, Stringbooleanboolean, Stringdoubledouble, String。所以不行。您不能传递包含TIMESTAMP的Map

您可以使用.info/serverTimeOffset获得相似的结果

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);
  }
  @Override
  public void onCancelled(FirebaseError error) {
    System.err.println("Listener was cancelled");
  }
});


现在,您可以在查询中使用它:

double serverTime = System.currentTimeMillis() + offset;
ref.orderBy('createdAt').startAt(serverTime);

07-24 09:47
查看更多