Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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 Firebase根据未工作的子项对数据进行排序_Android_Firebase_Sorting_Firebase Realtime Database - Fatal编程技术网

Android Firebase根据未工作的子项对数据进行排序

Android Firebase根据未工作的子项对数据进行排序,android,firebase,sorting,firebase-realtime-database,Android,Firebase,Sorting,Firebase Realtime Database,我正在尝试开发一个简单的应用程序来学习firebase数据库 这是我的实时数据库模式 mydirectory -contact_list -LOyDhepB_IZlM6lZtko mobileNumber: "9385746982" name: "Jay" -LOyDhetiPHalLhXrOaU mobileNumber: "8000478912" name: "Ravi" -LOyDhetiPHalLhXrOaV

我正在尝试开发一个简单的应用程序来学习firebase数据库

这是我的实时数据库模式

mydirectory
 -contact_list
   -LOyDhepB_IZlM6lZtko
      mobileNumber: "9385746982"
      name: "Jay"
   -LOyDhetiPHalLhXrOaU
      mobileNumber: "8000478912"
      name: "Ravi"
   -LOyDhetiPHalLhXrOaV
      mobileNumber: "123456789"
      name: "ABC"
   -LOyDheubruATyyBp8dG
      mobileNumber: "023456879"
      name: "XYZ"
我想获得按名称排序的数据列表

所以我用这个片段在我的android应用程序中加载数据

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("contact_list").orderByChild("name").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Map<String, Object> objectMap = (HashMap<String, Object>) dataSnapshot.getValue();
            Master.personList.clear();
            for (Object obj : objectMap.values()) {
                if (obj instanceof Map) {
                    Map<String, Object> mapObj = (Map<String, Object>) obj;
                    String name = (String) mapObj.get("name");
                    String mobileNumber = (String) mapObj.get("mobileNumber");
                    Person person = new Person(name, mobileNumber);
                    Master.personList.add(person);

                    populateListView();
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.w("ANDs", "Failed to read value.", error.toException());
        }
    });

我已经尝试了很多类似于这个主题的帖子,但都没有效果!请不要复制,请帮我解决

A
HashMap
只能包含一个键和一个值。根据定义,
地图中的键不按顺序排列。因此,当您调用
dataSnapshot.getValue()
时,您将丢弃所有订购信息

要维持顺序,您需要循环使用
dataSnapshot.getChildren()

您还将注意到,我使用
child(…)
获取特定属性的子快照,并从中获取
字符串
值。您的方法也会奏效,但我发现,当我坚持快照的时间更长时(而不是转换为
映射
),会收到更好的错误消息

{
 "rules": {
    "mydirectory": {
        "contact_list": {
        "$user_id": {
          ".indexOn": ["name"]
        }
        }
    },
    ".read": true,
    ".write": true
  }
}
public void onDataChange(DataSnapshot dataSnapshot) {
    Master.personList.clear();

    for (DataSnapshot contactSnapshot: dataSnapshot.getChildren()) {
        String name = contactSnapshot.child("name").getValue(String.class);
        String mobileNumber = contactSnapshot.child("mobileNumber").getValue(String.class);
        Person person = new Person(name, mobileNumber);
        Master.personList.add(person);
    }

    populateListView();
}