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

如何对多个孩子执行查询?

如何对多个孩子执行查询?

青春有我 2023-02-16 17:04:32
我正在尝试进行一项显示课程并将其列在回收站视图中的活动。但是,我在从 firebase 查询数据时遇到问题。在我展示我的数据库结构后,我会解释更多。这是我的数据库结构:"Classes": {    "-Li9nBUgnFmCWqUmwV5W": {        "class_info": {            "date_clasname": "August 6, 2019",            "room_number": "131",            "subject": "Science",            "teacher": "Ms.Henry",            "id": "-Li9nBUgnFmCWqUmwV5W"        }    },    "-Li9n_IYwbTNPdNAsTAu": {        "class_info": {            "date_clasname": "August 6, 2019",            "room_number": "131",            "subject": "Math",            "teacher": "Ms.Henry",            "id": "-Li9n_IYwbTNPdNAsTAu"        }    },    "-Li9naUipsa865NBpZjW": {        "class_info": {            "date_clasname": "August 6, 2019",            "room_number": "131",            "subject": "Other",            "teacher": "Ms.Henry",            "id": "-Li9naUipsa865NBpZjW"        }    },    "-Li9nbpwp2qchwmZRDP9": {        "class_info": {            "date_clasname": "August 6, 2019",            "room_number": "131",            "subject": "Technology",            "teacher": "Ms.Henry",            "id": "-Li9nbpwp2qchwmZRDP9"        }    },    "-Li9ne0NDyjcB4SIWi1z": {        "class_info": {            "date_clasname": "August 6, 2019",            "room_number": "131",            "subject": "Social Studies",            "teacher": "Ms.Henry",            "id": "-Li9ne0NDyjcB4SIWi1z"        }    }},我想我的问题可能是我无法获取随机生成的 ID 并将其设置为我的孩子,然后再在我的 onChildAdded 中将其设置为我的另一个孩子“class_info”。谢谢你!
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您正在构建这样的查询:


Query query = myRef.child(id).child("class_info").orderByChild("subject").equalTo("Science");

这表示要通过id(我认为您的 JSON 中未显示)找到一个孩子,然后找到一个孩子class_info,然后在其下找到subject每个孩子的属性并对其进行过滤。所以路径是$id/class_info/*/subject,其中*是你要过滤返回的子节点。


但你实际拥有的是/Classes/*/class_info/subject. 所以你有一个节点Classes,你想返回其class_info/subject具有给定值的子节点。在代码中这是:


DatabaseReference classesRef = FirebaseDatabase.getInstance().getReference("Classes");


Query query = classesRef.orderByChild("class_info/subject").equalTo("Science");


query.addListenerForSingleValueEvent(new ValueEventListener() {

    @Override

    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        list = new ArrayList<>();

        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

            Class_model new_class = dataSnapshot1.getValue(Class_model.class);

            ...


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信