我将数据保存到Fire base中,但是当我检索它时。数据不在序列中。
此处数据以准确的顺序保存:
但是当我检索数据时丢失了它的序列:
以下是我检索数据的代码
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users").child(Autho_User.getUid()).child("Data");
ref.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(" Value = "+dataSnapshot.toString());
}
(打印它只是为了检查值)数据不在序列中,即使我通过
dataSnapshot.getvalue();
希望你能得到我的问题。我按顺序需要数据
答案 0 :(得分:0)
Firebase存储JSON数据。根据定义,JSON中节点下的子节点是无序的。只有在显示或检索数据时才会获得订单。因此,您显示的第一个屏幕截图就是Firebase数据库控制台显示它的顺序。
如果您想在应用程序中按特定顺序获取数据,则需要做两件事:
您共享的代码既不是1也不是2,因此打印数据的顺序是任何人的猜测。通常它将按键的字典顺序排列,但它未定义。
要了解如何订购/过滤数据,请阅读Firebase documentation on ordering and filtering。要了解在使用ValueEventListener
时如何维护项目的顺序,请阅读Firebase documentation on listening for value events。当你将这两者结合起来时,你会得到:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users").child(Autho_User.getUid()).child("Data");
Query dataOrderedByKey = ref.orderByKey();
dataOrderedByKey.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
System.out.println("Key = "+childSnapshot.getKey()+" Value = "+childSnapshot.toString());
}
}
...
这是一个非常常见的错误/问题,所以这里有一些以前的问题供参考: