- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最佳答案
要访问数据库中的值,您需要为该位置创建一个 DatabaseReference
。以下是对数据库中位置的三个引用:
DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference("ZONES");
DatabaseReference zone1Ref = zonesRef.child("ZONE_1");
DatabaseReference zone1NameRef = zone1Ref.child("ZNAME");
在这段代码中:
zonesRef
指向 /ZONES
zone1Ref
指向 /ZONES/ZONE_1
zone1NameRef
指向 /ZONES/ZONE_1/ZNAME
参见 Firebase documentation on getting a database reference获取更多信息。
您可以将监听器附加到每个引用,以获取该位置的值。例如,获取 /ZONES/ZONE_1/ZNAME
的值:
zone1NameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, dataSnapshot.getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
}
});
有关此类读取操作的更多信息,请参阅 Firebase documentation on reading values .
如果您改为监听 /ZONES/ZONE_1
,您将获得整个节点及其所有属性的 DataSnapshot
。然后使用 DataSnapshot.child()
从中获取 ZNAME
:
zone1Ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, dataSnapshot.child("ZNAME").getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
}
});
更上一层楼,您可以在 /ZONES
上收听,这将为您提供所有区域的快照。由于这会处理多个 child ,因此您需要使用 DataSnapshot.getChildren()
遍历它们:
zonesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot zoneSnapshot: dataSnapshot.getChildren()) {
Log.i(TAG, zoneSnapshot.child("ZNAME").getValue(String.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
}
});
有关这方面的更多信息,请参阅 Firebase documentation on listening for lists of data .
最后,您可能想要查询以查找特定区域,例如查找具有 "ZCODE": "ECOR"
的区域:
Query zonesQuery = zonesRef.orderByChild("ZCODE").equalTo("ECOR");
zonesQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot zoneSnapshot: dataSnapshot.getChildren()) {
Log.i(TAG, zoneSnapshot.child("ZNAME").getValue(String.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
}
});
要了解更多信息,请阅读 Firebase documentation on sorting and filtering data .
关于android - 如何从 android 中的 firebase 获取子值的子值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43293935/
我是一名优秀的程序员,十分优秀!