Android Firebase根据未工作的子项对数据进行排序
我正在尝试开发一个简单的应用程序来学习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
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();
}