我首先要检查哪个节点有当前用户的用户ID。这一步很好。它给出了正确的值。接下来,我想在该节点(1或2)中搜索以查找该节点内的哪个用户ID具有名为“type”的子节点,该子节点具有值“driver”。我想找到type =“driver”的用户标识。
目前的代码是
{{1}}
答案 0 :(得分:0)
要获取子键,请尝试:
ds1.getKey();
答案 1 :(得分:0)
使用查询查找驱动程序:
DatabaseReference busRef = ds.getRef(); // no need to rebuild this ref, but I'd recommend rename ds to something more meaningful
Query driverQuery = busRef.orderByKey("type").equalTo("driver");
driverQuery.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot driverSnapshot : dataSnapshot.getChildren()) {
System.out.println(driverSnapshot.getKey());
}
}
...
这样可行,但我建议认真重新考虑您的数据结构。利用您域的数据模型,提出一个允许您使用案例的有效结构。
例如:如果总线只能有一个驱动程序,为什么不将驱动程序确定为每个总线的属性作为顶级集合:
drivers: {
"1": "mlxMu..."
}
有了它,您可以直接查找驱动程序,而不必查询它们:
Query driverRef = ref.getChild("drivers").getChild(busno);
driverQuery.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.getValue(String.class));
}
...
事实上,对于这种数据结构,简单地将drivers
列表保存在内存中并避免嵌套侦听器可能非常可行。这极大地提高了代码的可读性/可维护性。