之间有什么区别
FirebaseDatabase.getInstance().getReference()
.child("Users")
.child("Accounts")
.child("AC123");
和
FirebaseDatabase.getInstance().getReference()
.child("Users")
.child("Accounts")
.orderByKey()
.equalTo("AC123");
使用addListenerForSingleValueEvent
似乎返回相同的DataSnapshot,因为toString()
值是相同的,并且使用DataSnapshot.getValue()似乎返回相同的HashMaps但只有第一个引用报告它“有孩子” ”。
尝试在第二个引用中查询子项只会抛出一个NPE。
{
"Users" : {
"Accounts" : {
"AC123" : {
"linked" : true,
"sort" : 0,
"type" : 1
}
},
etc
答案 0 :(得分:2)
这两个查询不会返回相同的节点。
对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
这意味着第二个查询返回/Users/Accounts
下的节点子集。要访问单个匹配的节点,您需要循环snapshot.getChildren()
,即使只有一个匹配的子节点。
第一个查询始终返回单个节点,即/Users/Accounts/AC123
处的节点。因此,孩子的数据可以在snapshot.getValue()
下立即获得。