Запрос базы данных Firebase в реальном времени с использованием дочернего свойства и подстановочного знака - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть следующая структура БД для отображения областей в соответствующие города:

"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

Как я могу выполнить такой запрос, если это возможно? Или даже как я могу изменить структуру БД, если это приведет к решению?

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Попробуйте вот так

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) {

            }
        });
1 голос
/ 30 апреля 2019

Вы можете попробовать следующее:

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, затем вы зацикливаетесь внутри прямых потомков, и он будет извлекать данные в соответствии с запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...