我可以正常读取数据,但是当我想使用LIFO规则从Firebase读取数据时,这次我无法读取任何类型的数据。 但是我想从Firebase读取数据 上次我的Firebase数据来自我的Firebase的数据
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
Firebase 中没有隐式的数据排序,因此只有在您的数据结构确保的情况下,"最后加入"才有意义。
例如,如果您使用 Firebase 的 push()
方法添加新子项,则它们的键按字典顺序不断增加。在这种情况下,您只能通过以下方式获取最新项目:
dref.orderByKey().limitToLast(1).addValueEventListener(new ValueEventListener() {
...
如果不使用 push()
,则获取最新项的唯一方法是确保每个子节点中都有一个带有时间戳的属性,通常是通过编写服务器端时间戳。一旦每个子项都有这样的时间戳,您就可以通过以下方式获取最新的项目:
dref.orderByChild("timestamp").limitToLast(1).addValueEventListener(new ValueEventListener() {
...
Query query = FirebaseDatabase.getInstance().getReference().child("node name")
.orderByKey().endAt(lastKey).limitToLast(5);
如果需要逐个数据,可以使用ChildEventListener
。
query.addChildEventListener(childEventListener);
如果需要节点的完整快照,可以使用ValueEventListener
。
query.addValueEventListener(valueEventListener);