2017-05-23 13 views
0

これはFirebase、データベース内の私のJSONデータ構造である:私はJSONツリーからのchildrenを除くすべてのフィールドをプルアップすることができるよ:アンドロイド

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" 

。誰も私にどのように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がリストされているので、おそらく探している:Firebaseのドキュメントは、this blog postのように、このようなリストのための配列を使用しないことをお勧めしていること

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

注意。代わりにusing push() to populate listsをお勧めします。

+0

完璧で完璧!実際には、私はfirebaseデータベースに既存のJSONファイルをインポートし、そこからActivityからデータをプルアップしました。 – Chip

2

これら4列のdeclartationた後、あなたの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)); 
     } 

を、それがお役に立てば幸いです。

+1

他のノードでは、3人の子供がいます。私はこのような手作業のようなハードコードはできませんか? – Chip

+0

私は知らなかったし、はい、あなたは正しいですが、上記の例では各ノードに2人の子供しか見ませんでした。だから、これを解決するには、Frank van Puffelenが提案した行を追加してください。 –

+0

私の更新された回答も参照してください。 –

1

あなたが実際に知っている子供の数について実際に分かっていないのであれば、私の解決策は他のユーザーが以前に提案した方が良いと思います。

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