为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

忽然笑 2022-11-02 10:52:43
我有以下数据库结构,用于将区域映射到相应的城市:"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 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

像这样试试


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


            }

        });


查看完整回答
反对 回复 2022-11-02
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您可以尝试以下方法:


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,然后您在直接子代中循环,它将根据查询检索数据。


查看完整回答
反对 回复 2022-11-02
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号