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

时间:2017-05-23 16:03:43

标签: 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"

我能够从JSON树中提取除children之外的所有字段。任何人都可以建议我如何从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]

3 个答案:

答案 0 :(得分:4)

由于public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot childSnapshot: dataSnapshot.child("children").getChildren()) { System.out.println(childSnapshot.getValue(String.class)); } } 是一个列表,您可能正在寻找:

npm run watch

请注意,Firebase文档建议不要在此类列表中使用数组,例如在this blog post中。相反,它建议using push() to populate lists

答案 1 :(得分:2)

在声明这4个字符串之后,在onDataChange()方法中添加以下代码行:

      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);
      for (DataSnapshot ds : dataSnapshot.child("children").getChildren()) {
          Log.d("TAG", ds.getValue(String.class));
      }

希望它有所帮助。

答案 2 :(得分:1)

如果你实际上不知道你有多少孩子,我认为我的解决方案比其他用户之前建议的更好。

List<String> children = dataSnapshot.child("children").getValue(new GenericTypeIndicator<List<String>>(){});