首页 > 解决方案 > 无法使用 orderByChild 方法对来自 firebase 的数据进行排序

问题描述

您好我正在尝试实时查询数据。我的数据库结构如下所示:

{
    "Businesses": {
        "-MW_bnEkz0ZjRlgpaF5V": {
            "name": "business 1",
            "users": {
                "8baHUbgQlbeiw9ydGHp6qZHm59I2": 0,
                "Wcaa9RQTJIPh8jhFHs0S4laLcPD3": 1
            }
        },

        "-MW_cYkt0hqhu0YSVQ_q": {
            "name": "business 1",
            "users": {
                "Wcaa9RQTJIPh8jhFHs0S4laLcPD3": 0
            }
        }
    },
    "Users": {
        "8baHUbgQlbeiw9ydGHp6qZHm59I2": {
            "name": "user 1",
            "businesses": {
                "-MW_bnEkz0ZjRlgpaF5V": 0
            }
        },

        "Wcaa9RQTJIPh8jhFHs0S4laLcPD3": {
            "name": "user 1",
            "businesses": {
                "-MW_cYkt0hqhu0YSVQ_q": 0,
                "-MW_bnEkz0ZjRlgpaF5V": 1
            }
        }
    }
}

我只想获取users子项下具有等于 0的特定用户 ID 的企业

我试过这个:

    private void listenToBusinessesUserJoinedTo(String userId){

        Query query = FirebaseDatabase.getInstance().getReference("Businesses");
        query.orderByChild("users/"+ userId).equalTo(User.JOINED); // User.JOINED = 0
        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                
                businessesUserJoinedList.clear();
                if (dataSnapshot.exists()){
                    for (DataSnapshot postSnapShot : dataSnapshot.getChildren())
                        businessesUserJoinedList.add(postSnapShot.getValue(Business.class));
                }
                
                updateUI();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }

当我通过时8baHUbgQlbeiw9ydGHp6qZHm59I2userId我会取回Businesses子项下的所有数据,而不仅仅是带有 id 的业务 -MW_bnEkz0ZjRlgpaF5V

. 我做错了什么?

标签: javaandroidfirebasefirebase-realtime-database

解决方案


推荐阅读