Reputation: 3385
I have the following DB structure for mapping Areas to their corresponding Cities:
"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"
},
--
--
}
Now, once a user chooses City_1, I want to display all Areas of that city. In our case, Area_1 & Area_2 only!
I am trying to do something like this:
mAreasNodeReference.(WILD_CARD).orderByChild("cityName").equalTo("City_1").addListenerForSingleValueEvent..etc
How can I achieve such query if possible? Or even how can I amend the DB stucture if that would lead to a solution?
Upvotes: 0
Views: 315
Reputation: 543
Try like this
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) {
}
});
Upvotes: 1
Reputation: 80914
You can try the following:
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) {
}
});
Here your dataSnapshot
is at node Areas
, then you loop inside the direct children and it will retrieve the data according to the query.
Upvotes: 2