如何从 firebase 数据库检索数组内的数组数据:Android

Pav*_*van 0 android json firebase firebase-realtime-database

这是我在 Firebase 数据库中的 JSON 数据结构:

familylist
     |- 0
        |--children
        |   |-- 0:"AAA"
        |   |-- 1:"BBB"
        |-- code: "2222"
        |-- family: "SWE"
        |-- fatherName: "ABC"
        |-- motherName: "XYZ"
     |- 1
        |--children
        |   |-- 0:"XXX"
        |   |-- 1:"YYY"
        |-- code: "3333"
        |-- family: "ABC"
        |-- fatherName: "ERT"
        |-- motherName: "XTS"
Run Code Online (Sandbox Code Playgroud)

我能够提取除childrenJSON 树之外的所有字段。谁能建议我如何从中检索数据children

这是我用于从 firebase 数据库中检索除子项之外的所有字段的代码。为了检索这些children值,可以对这段代码做些什么?我无法弄清楚。

familyListReference.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot ds: dataSnapshot.getChildren()) {
      String key = (String) ds.getKey();
      Log.d(TAG, "Key" + key);
      DatabaseReference keyReference = FirebaseDatabase.getInstance().getReference().child("familylist").child(key);
      Log.d(TAG, "Key reference: " + keyReference);
      keyReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
          String code = dataSnapshot.child("code").getValue(String.class);
          String family = dataSnapshot.child("family").getValue(String.class);
          String father = dataSnapshot.child("fatherName").getValue(String.class);
          String mother = dataSnapshot.child("motherName").getValue(String.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
          Log.d(TAG, "Read failed");
        }
      }); // [End of keyReference]

    } // END of for Loop
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    Log.d(TAG, "Read failed");
  }
}); // [End of familyListDatabaseReference]
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

由于children是一个列表,您可能正在寻找:

public void onDataChange(DataSnapshot dataSnapshot) {
  for (DataSnapshot childSnapshot: dataSnapshot.child("children").getChildren()) {
    System.out.println(childSnapshot.getValue(String.class));
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,Firebase 文档建议不要将数组用于此类列表,例如在此博客文章中。相反,它建议使用push()来填充列表