android firebase查询跨多个对象的子对象

时间:2017-05-10 22:20:01

标签: android firebase firebase-realtime-database

我试图在不知道用户ID的情况下找到具有特定id(而不是密钥)的会话。

数据库结构

Database Structure

我最初的尝试是循环遍历所有用户的孩子并每次都创建一个新的参考,但它不起作用,我无法弄清楚为什么我知道它是否应该起作用。

 database.child("users").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot snap : dataSnapshot.getChildren()){
                        database.child("users").child(snap.getKey()).child("sessions")
                                .orderByChild("id").equalTo(id)
                                .limitToFirst(1)
                                .addListenerForSingleValueEvent(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot data) {
                                        if (data.exists()) {
                                            Session session = data.getValue(Session.class);
                                        }
                                    }

                                    @Override
                                    public void onCancelled(DatabaseError databaseError) {

                                    }
                        });
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

2 个答案:

答案 0 :(得分:1)

你想要做的事情的整个想法是正确的,但你有一个错误。您的上次reference错了。当你第二次尝试迭代你错过了一个孩子时。您需要添加.child(sessionId)。要解决此问题,请使用以下代码:

database.child("users").child(snap.getKey()).child("sessions").child(sessionId)
                            .orderByChild("id").equalTo(id)
                            .limitToFirst(1)

其中sessionIdpush()方法生成的第二个唯一ID。

希望它有所帮助。

答案 1 :(得分:0)

由Firebase拒绝的权限导致的问题。