Firebase orderbychild()。equalto()显示null

时间:2017-06-28 16:46:01

标签: android firebase firebase-realtime-database

这是我的JSON结构:

{
  "users" : {
    "userKey1" : {
      "deviceToken" : "deviceTokenID",
      "displayName" : "Name here",
      "dob" : "28/6/2017",
      "email" : "efg@wxy.com",
      "gender" : "M"
   },
    "userKey2" : {
      "deviceToken" : "deviceTokenID",
      "displayName" : "Name here",
      "dob" : "28/1/2017",
      "email" : "abc@xyz.com",
      "gender" : "M",
    }
  }
}

在我的Android Firebase文件中,我输入:

Query findUser = mDatabase.child("users").orderByChild("email").equalTo("abc@xyz.com");
findUser.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Log.i("findUser","Snapshot: " + dataSnapshot.toString());
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我得到以下日志:

06-28 22:06:50.190 30962-30962/in.sample.project I/findUser: Snapshot: DataSnapshot { key = users, value = null }

我不知道为什么当我有一个孩子的电子邮件节点匹配" abc@xyz.com"。

2 个答案:

答案 0 :(得分:1)

您需要一个foreach循环来获取findUser查询中的用户,因为您的查询包含一个集合。

Query findUser = mDatabase.child("users").orderByChild("email").equalTo("abc@xyz.com");

将此部分放入eventlistener中 ....

public Iterable<DataSnapshot> getChildren (){

       for (DataSnapshot child : parent.getChildren()) { 
            ....
       }
}

答案 1 :(得分:1)

需要添加安全规则。

rules: {
"users" : {
      ".indexOn": "email",
    }
}

我想,这就是诀窍。希望它可以帮助某人。 :)