0

In Android, I like to retrieve only the last(descending) 2 key-value of each child.

enter image description here

mDatabase = FirebaseDatabase.getInstance().getReference("users");

    mDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            for (DataSnapshot dsp : dataSnapshot.getChildren()) {

            }
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
GK_
  • 1,212
  • 1
  • 12
  • 26

1 Answers1

2

From what I know you can't reverse the order of the dataSnapshot.getChildren() as mentioned in Firebase Database loop through children starting from last child

But for your particular problem what you can do

@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

    List<DataSnapshot> list = new ArrayList<>();

    for (DataSnapshot dsp: dataSnapshot.getChildren()) {
        list.add(snapshot);
    }

    // It reverses the order of the list.
    Collections.reverse(list);

    // Now list.get(0) and list.get(1) are the snapshots you need!
}


Aakash Sharma
  • 427
  • 1
  • 6
  • 15