Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase Query.startAt(ServerValue.TIMESTAMP) in Java

Tags:

java

firebase

I'd like to emulate the following, to exclude initial data from my Firebase listener, but do it in 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());
});

There doesn't seem to be a signature of .startAt() that would take ServerValue.TIMESTAMP (which is a Map in the Java SDK) as a parameter. Is this query (using the Firebase server timestamp) simply not possible in Java?

like image 429
Keeth Avatar asked Apr 16 '26 13:04

Keeth


1 Answers

The API doc says startAt() can take String, String, String, boolean, boolean, String, double, or double, String. So no. You can't pass a Map containing TIMESTAMP.

You could achieve a similar result by using .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");
  }
});

And now you can use that in your query:

double serverTime = System.currentTimeMillis() + offset;
ref.orderBy('createdAt').startAt(serverTime);
like image 73
Kato Avatar answered Apr 18 '26 03:04

Kato