在DataSnapshot中重新从Firebase中恢复数据(不按顺序)

时间:2017-07-03 01:02:17

标签: android firebase firebase-realtime-database

我将数据保存到Fire base中,但是当我检索它时。数据不在序列中。

此处数据以准确的顺序保存: Here Data Is Saved In Accurate Sequence

但是当我检索数据时丢失了它的序列:

In It Data Lost Its Sequence

以下是我检索数据的代码

 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();

希望你能得到我的问题。我按顺序需要数据

1 个答案:

答案 0 :(得分:0)

Firebase存储JSON数据。根据定义,JSON中节点下的子节点是无序的。只有在显示或检索数据时才会获得订单。因此,您显示的第一个屏幕截图就是Firebase数据库控制台显示它的顺序。

如果您想在应用程序中按特定顺序获取数据,则需要做两件事:

  1. 执行以该顺序返回数据的查询。
  2. 确保您的代码保持该顺序。
  3. 您共享的代码既不是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()); 
            }
        }
        ...
    

    这是一个非常常见的错误/问题,所以这里有一些以前的问题供参考: