使用equalTo()的Firebase orderby()返回零项

时间:2016-11-12 10:08:56

标签: android firebase firebase-realtime-database firebase-authentication

我的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中已有数据?

1 个答案:

答案 0 :(得分:0)

您的代码存在一些小问题:

  1. 您正尝试订购/过滤儿童userIdorderByChild("userId/height")。这意味着结果将为空。

  2. 你无法遍历快照(我甚至惊讶于编译)。相反,你应该循环其孩子:for(DataSnapShot entry: dataSnapshot.getChildren()) {...

  3. 您正在使用查询,但如果您只是按密钥查找项目,那么您的代码会更高效,更具可扩展性:reference.child(key).addValueEventListener(...