这是我的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"。
答案 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",
}
}
我想,这就是诀窍。希望它可以帮助某人。 :)