我具有以下数据库结构,用于将区域映射到其对应的城市:
"Areas" : {
"Area_1" : {
"EnglishName" : "TheAreaNameInEnglish",
"GermanName" : "TheAreaNameInGerman",
"cityName" : "City_1"
},
"Area_2" : {
"EnglishName" : "TheAreaNameInEnglish",
"GermanName" : "TheAreaNameInGerman",
"cityName" : "City_1"
},
"Area_3" : {
"EnglishName" : "TheAreaNameInEnglish",
"GermanName" : "TheAreaNameInGerman",
"cityName" : "City_5"
},
--
--
}
现在,一旦用户选择City_1,我想显示该城市的所有区域。在我们的情况下,仅Area_1和Area_2!
我正在尝试做这样的事情:
mAreasNodeReference.(WILD_CARD).orderByChild("cityName").equalTo("City_1").addListenerForSingleValueEvent..etc
如果可能的话,如何实现这种查询?甚至如果可以解决问题,我该如何修改数据库结构?
答案 0 :(得分:1)
您可以尝试以下操作:
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Areas");
databaseReference.orderByChild("cityName").equalTo("City_1").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
String key = ds.getKey();
String germanName = ds.child("GermanName").getValue(String.class);
String englishName = ds.child("EnglishName").getValue(String.class);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这里dataSnapshot
在节点Areas
处,然后在直接子级中循环,它将根据查询检索数据。
答案 1 :(得分:1)
尝试这样
Query myTopPostsQuery = mAreasNodeReference.child("Areas").orderByChild("cityName").equalTo("City_1");
myTopPostsQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.getValue()!=null){
for(DataSnapshot snapshot:dataSnapshot.getChildren()){
String AreaName=snapshot.getKey();
Log.d(TAG,"AreaName "+AreaName)
String germanName = snapshot.child("GermanName").getValue(String.class);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});