Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在DataSnapshot中从Firebase检索数据(不按顺序)_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 在DataSnapshot中从Firebase检索数据(不按顺序)

Android 在DataSnapshot中从Firebase检索数据(不按顺序),android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我将数据保存到Fire base中,但当我检索它时。数据不在序列中 此处数据按准确顺序保存: 但当我检索到丢失了序列的数据时: 这是我检索数据的代码 DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users").child(Autho_User.getUid()).child("Data"); ref.addListenerForSingleValueEvent(

我将数据保存到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();

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

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

  • 执行按该顺序返回数据的查询
  • 确保您的代码保持该顺序
  • 您共享的代码既不是1也不是2,因此数据的打印顺序是任何人都可以猜测的。通常它是按键的字典顺序排列的,但它是未定义的

    要了解如何排序/筛选数据,请阅读。要了解如何在使用
    ValueEventListener
    时保持项目顺序,请阅读。当您将这两者结合起来时,您会得到:

    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()); 
            }
        }
        ...
    
    这是一个极为常见的错误/问题,以下是之前的一些问题供参考:


    您尝试过firebase orderByKey()排序运算符吗?@icaneatclouds这里我的密钥是“数据”,所以即使我尝试了orderByValue(),它也不起作用;不是为梅森克工作的人明白了吗