Reputation: 1
I am using a query and having some trouble. I want retrieve value from 5th to 10th. I try to use startAt () the query just doesn't get anything.
public void read(){
Query query = FirebaseDatabase.getInstance().getReference("values").orderByChild("timestamp").startAt(5).endAt(10);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
Value upload = data.getValue(Value.class);
mUploads.add(upload);
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(MainActivity.this, "Loading Quote failed", Toast.LENGTH_SHORT).show();
}
});
}
Upvotes: 0
Views: 610
Reputation: 598765
Tl;DR: Firebase database queries are cursor based, and not offset based.
When you call startAt()
you have to pass in the value of the timestamp you want to start returning results at. You can't pass in offsets, as you are trying to do now.
You current code:
FirebaseDatabase.getInstance()
.getReference("values")
.orderByChild("timestamp")
.startAt(5)
.endAt(10);
Tells the database to:
values
under the root.timestamp
value.5
and start returning results from there.10
.As you can probably see, this won't give you any results, since none of your child nodes have a timestamp value between 5 and 10.
As said: Firebase queries are cursor based, meaning they work on knowing something about the node to start at. While many databases paginate based on offsets, Firebase doesn't and you'll need to know the timestamp value of the node to start at.
For example, if you want to start at the node you have opened in your screenshot, and then return the next 5 results, you'd do:
FirebaseDatabase.getInstance()
.getReference("values")
.orderByChild("timestamp")
.startAt(-1590413110563)
.limitToFirst(5);
Upvotes: 1