猿问

使用子属性和通配符的 Firebase 实时数据库查询

我有以下数据库结构,用于将区域映射到相应的城市:


"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

如果可能的话,我怎样才能实现这样的查询?或者,如果这会导致解决方案,我该如何修改数据库结构?


忽然笑
浏览 172回答 2
2回答

泛舟湖上清波郎朗

像这样试试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) {            }        });

30秒到达战场

您可以尝试以下方法:DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Areas");databaseReference.orderByChild("cityName").equalTo("City_1").addValueEventListener(new ValueEventListener() {@Overridepublic 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);       }    }}@Overridepublic void onCancelled(DatabaseError databaseError) {  }});在这里,您dataSnapshot位于节点Areas,然后您在直接子代中循环,它将根据查询检索数据。
随时随地看视频慕课网APP

相关分类

Java
我要回答