2017-05-23 64 views
0

這是火力地堡數據庫我的JSON數據結構:如何檢索數據庫火力內部數組的數組數據:Android的

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] 

回答

2

由於children是一個列表,你可能在尋找:

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

注意,火力地堡文檔建議不要使用數組這樣的列表,如this blog post。相反,它建議using push() to populate lists

+0

完美無瑕!實際上,我已經將一個現有的JSON文件導入到firebase數據庫,然後從Activity中提取數據。 – Chip

2

添加的代碼,這行你onDataChange()方法,這4串的declartation後:

 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)); 
     } 

希望它能幫助。

+1

在其他節點中,我有3個孩子。我不能像這樣手動硬編碼嗎? – Chip

+0

我不知道,是的,你說得對,但在上面的例子中,我看到每個節點中只有2個孩子。因此,爲了解決這個問題,請添加Frank van Puffelen建議的這些內容。 –

+0

請參閱我更新的答案。 –

1

如果你實際上不知道你有多少孩子,我認爲我的解決方案比另一個用戶以前建議的更好。

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