如何从android中的firebase获取子值的子项?

Sur*_*kha 11 android firebase firebase-realtime-database

如何获得ZNAME值?最初我需要比较密钥(Ex :: Here ZONE_1)然后ZNAME需要得到.提前致谢...

Fra*_*len 33

要访问数据库中的值,请DatabaseReference为该位置创建一个值.以下是对数据库中位置的三个引用:

DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference("ZONES");
DatabaseReference zone1Ref = zonesRef.child("ZONE_1");
DatabaseReference zone1NameRef = zone1Ref.child("ZNAME");
Run Code Online (Sandbox Code Playgroud)

在这个片段中:

  • zonesRef 指着 /ZONES
  • zone1Ref 指着 /ZONES/ZONE_1
  • zone1NameRef 指着 /ZONES/ZONE_1/ZNAME

有关详细信息,请参阅有关获取数据库引用Firebase文档.

您可以将侦听器附加到每个引用,以获取该位置的值.例如,要获取以下值/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());
    }
});
Run Code Online (Sandbox Code Playgroud)

有关此类读取操作的更多信息,请参阅有关读取值Firebase文档.

如果您改为倾听/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());
    }
});
Run Code Online (Sandbox Code Playgroud)

还有一个级别,您可以收听/ZONES,这将为您提供所有区域的快照.由于这会处理多个子节点,因此您需要使用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());
    }
});
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅有关侦听数据列表Firebase文档.

最后,您可能希望查询以查找特定区域,例如,使用以下内容查找区域"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());
    }
});
Run Code Online (Sandbox Code Playgroud)

要了解有关此内容的更多信息,请阅读有关排序和过滤数据Firebase文档.