2017-04-08 69 views

回答

13

要访问数据库中的值,请为该位置创建一个DatabaseReference。以下是位置在数据库中三个参考:到/ZONES/ZONE_1

  • zone1NameRef

    • zonesRef/ZONES
    • zone1Ref/ZONES/ZONE_1/ZNAME

    DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference("ZONES"); 
    DatabaseReference zone1Ref = zonesRef.child("ZONE_1"); 
    DatabaseReference zone1NameRef = zone1Ref.child("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,这将让你的快照与所有区域。由于这种处理多个孩子,则需要通过他们与循环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

  • +0

    谢谢你对我的工作。 – Surekha

    +0

    非常简单明了的解释。保持与firebase api探索良好的工作! – VVB

    相关问题