我的firebase数据库中有这个规则
"Item":{
"$userId": {
".write": "auth != null && $userId === auth.uid"
}
}
我有这个数据
Item
nXQw4a2jlMg34567811glaTD0bE2
-KNJLSxfR_S8AeLj0v7d
height:20
id:-KNJLSxfR_S8AeLj0v7d
当我写下面的查询时,一切正常。
mDataBase = FirebaseDatabase.getInstance().getReference(FirebaseConstants.ITEM);
query = mDataBase.orderByChild("userId/height").limitToLast(2);
但是下面的查询返回零
public void getItems(String key){
//key is -KNJLSxfR_S8AeLj0v7d
DatabaseReference reference = FirebaseDatabase.getInstance().getReference(FirebaseConstants.ITEM);
reference.orderByChild("userId/id").equalTo(key).addValueEventListener(new MyEventListener());
}
我的倾听者
private class MyEventListener implements ValueEventListener{
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot != null){
Log.d("size is "+dataSnapshot.getChildrenCount()) // returns 0
for(DataSnapShot entry: dataSnapshot){
Item item = entry.getValue(Item.class);
Log.d("height is "+ item.getHeight())
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
为什么它返回零并且我的firebase Db中已有数据?
答案 0 :(得分:0)
您的代码存在一些小问题:
您正尝试订购/过滤儿童userId
:orderByChild("userId/height")
。这意味着结果将为空。
你无法遍历快照(我甚至惊讶于编译)。相反,你应该循环其孩子:for(DataSnapShot entry: dataSnapshot.getChildren()) {...
您正在使用查询,但如果您只是按密钥查找项目,那么您的代码会更高效,更具可扩展性:reference.child(key).addValueEventListener(...