我试图在不知道用户ID的情况下找到具有特定id(而不是密钥)的会话。
数据库结构
我最初的尝试是循环遍历所有用户的孩子并每次都创建一个新的参考,但它不起作用,我无法弄清楚为什么我知道它是否应该起作用。
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) {
}
});
答案 0 :(得分:1)
你想要做的事情的整个想法是正确的,但你有一个错误。您的上次reference
错了。当你第二次尝试迭代你错过了一个孩子时。您需要添加.child(sessionId)
。要解决此问题,请使用以下代码:
database.child("users").child(snap.getKey()).child("sessions").child(sessionId)
.orderByChild("id").equalTo(id)
.limitToFirst(1)
其中sessionId
是push()
方法生成的第二个唯一ID。
希望它有所帮助。
答案 1 :(得分:0)
由Firebase拒绝的权限导致的问题。