如何在未知的孩子中检索未知密钥的值?

时间:2017-10-05 03:43:05

标签: java android firebase-realtime-database

我有一个Firebase数据库,如下所示:

enter image description here

Entries的孩子将拥有各种未知名称,每个孩子中的键/值也会有各种未知名称。我希望检索所有子名称和键名,但不确定如何在DataSnapshot中进行双循环。这是我到目前为止一直在玩的东西:

    mDatabase = FirebaseDatabase.getInstance().getReference();
    mDatabase.child("Entries").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot entries : dataSnapshot.getChildren()) {
                for (Map<String, String> entry : entries.getValue().entrySet()){
                    Map singlePair = (Map) entry.getValue();

我知道最后两行是乱七八糟但我不确定如何检索孩子们的内容?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我个人更喜欢坚持DataSnapshot课程,并给他们更多的语义名称。类似的东西:

mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("Entries").addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot entrySnapshot : dataSnapshot.getChildren()) {
      for (DataSnapshot propertySnapshot : entrySnapshot.getChildren()) {
        System.out.println(propertySnapshot.getKey()+": "+propertySnapshot.getValue(String.class));
      }
    }
  }
  ...

答案 1 :(得分:1)

请参阅以下代码。

FirebaseDatabase database = FirebaseDatabase.getInstance();
    database.getReference()
            .child("Entries")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()){

                        System.out.println(snapshot.getKey()); // home wifi, work computer, ...
                        Map<String, Object> map =(Map<String, Object>) snapshot.getValue();

                        for (Map.Entry<String, Object> entry : map.entrySet()){

                            System.out.println(entry.getKey()); // network name
                            System.out.println(entry.getValue().toString()); // password

                        }



                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });