2017-07-11 11 views
0

私は以下のデータベース構造を持っています。 Click here for image of data structure.Firebaseのネストされた子の値にアクセスする方法

私はArray listを反復し、一致する項目のためのすべてのイメージをつかむことができるようにArray listへのコンテンツの下にあるすべての「XXXXXXX」の項目をデータベース/コンテンツ/ XXXXXXX /マッチを取得しようとしています。例えば、Avery-Fit Solid Pantの場合、Flared Sleeve、High-Neck Stripe Topなどのブラウスのイメージを取得し、ベルスリーブドレスに移動して同じようにしたいと考えています。私が試したことは以下の通りですが、うまくいきません。

matchRef = FirebaseDatabase.getInstance().getReference().child("/content"); 

     matchRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

        SliderItems mvalue = dataSnapshot.getValue(SliderItems.class); 
        DataSnapshot contentSnapshot = dataSnapshot.child("/matches"); 
        Iterable<DataSnapshot> matchSnapShot = contentSnapshot.getChildren(); 
         for (DataSnapshot match : matchSnapShot){ 
          SliderItems c = match.getValue(SliderItems.class); 
         matchImages.add(c); 

        } 

       startMatchRecyclerView(); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

    } 

私のデータベースが正しく構成されておらず、次のように再構成されていることは間違いありませんでした。 See alternate structure here.これはより適切な構造だと思います。一致するものにアクセスしてArray listを入力することができます。各エントリのArray listを反復して 'true'のメンバーを見つけ、それぞれの 'true'メンバーのコンテンツからイメージを取得するにはどうすればよいですか?

答えて

0

/contentの値をリッスンすると、すべてのコンテンツを含むスナップショットが作成されます。 (matches性質を持っている)個々のコンテンツアイテムを取得するには、スナップショットの子供をループする必要があります。

matchRef = FirebaseDatabase.getInstance().getReference().child("/content"); 

matchRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot itemSnapshot: dataSnapshot.getChildren()) { 
      SliderItems mvalue = itemSnapshot.getValue(SliderItems.class); 
      DataSnapshot contentSnapshot = itemSnapshot.child("/matches"); 
      Iterable<DataSnapshot> matchSnapShot = contentSnapshot.getChildren(); 
       for (DataSnapshot match : matchSnapShot){ 
        SliderItems c = match.getValue(SliderItems.class); 
       matchImages.add(c); 

      } 
     } 
     startMatchRecyclerView(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     throw databaseError.toException(); // don't ignore errors 
    } 
}); 

また、あなたがforを取り除くことができ、その場合にはChildEventListenerを、使用することができますループを追加しました。onChildAddedは私のコードでitemSnapshotと呼ばれていました。

+0

ありがとうございました@FrankvanPuffelenこれは美しく機能しました! –

関連する問題