Java 如何使用后进先出规则从firebase读取数据
我可以正常读取数据,但当我想使用后进先出规则从firebase读取数据时,我无法读取任何类型的数据。但我想从firebase读取数据,上次哪些数据来自我的firebaseJava 如何使用后进先出规则从firebase读取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我可以正常读取数据,但当我想使用后进先出规则从firebase读取数据时,我无法读取任何类型的数据。但我想从firebase读取数据,上次哪些数据来自我的firebase dref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String root_order = dataSnapshot.getKey();
for (long i = dataSnapshot.getChildrenCount(); i <= 0; i--) {
studentList.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Student student = snapshot.getValue(Student.class);
studentList.add(student);
}
listView.setAdapter(adapter);
}
}
});
[1]: https://i.stack.imgur.com/f5pPw.png
dref.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
字符串root_order=dataSnapshot.getKey();
对于(long i=dataSnapshot.getChildrenCount();iFirebase中没有数据的隐式排序,因此只有在数据结构确保的情况下,“last in”才有意义
例如,如果您使用Firebase的push()
方法添加新的子项,则它们的键会不断按字典顺序递增。在这种情况下,您只能通过以下方式获取最新的项:
dref.orderByKey().limitToLast(1).addValueEventListener(new ValueEventListener() {
...
dref.orderByChild("timestamp").limitToLast(1).addValueEventListener(new ValueEventListener() {
...
如果您没有使用push()
,那么获取最新项目的唯一方法是确保每个子节点中都有一个带有时间戳的属性,通常是通过。一旦每个子节点中都有这样的时间戳,您可以通过以下方式获取最新项目:
dref.orderByKey().limitToLast(1).addValueEventListener(new ValueEventListener() {
...
dref.orderByChild("timestamp").limitToLast(1).addValueEventListener(new ValueEventListener() {
...
如果需要逐个数据,可以使用ChildEventListener
query.addChildEventListener(childEventListener);
如果需要节点的完整快照,可以使用ValueEventListener
query.addValueEventListener(valueEventListener);
先生,我使用limitToLast(1)方法,然后我得到最后一项,如果我使用limiToLast(2)则我得到最后2项,但我想从最后到第一读取所有数据,就像我有3个数据是a、b、c、d一样;我想读取d、c、b、aAh,你想让项目降序吗?这在Firebase实时数据库中是不可能的,所有查询都是升序的。请参阅