两个Android Firebase参考之间的差异

时间:2016-12-09 11:20:20

标签: android firebase-realtime-database

之间有什么区别
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

1 个答案:

答案 0 :(得分:2)

这两个查询不会返回相同的节点。

对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

这意味着第二个查询返回/Users/Accounts下的节点子集。要访问单个匹配的节点,您需要循环snapshot.getChildren(),即使只有一个匹配的子节点。

第一个查询始终返回单个节点,即/Users/Accounts/AC123处的节点。因此,孩子的数据可以在snapshot.getValue()下立即获得。