我想模拟以下内容,以从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()
可以采用String
,String, String
,boolean
,boolean, String
,double
或double, 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);