2017-10-30 10 views
0

値を使用して特定のノードを取得するfirebaseデータベースを照会する際に問題があります。私のスキーマは、ここに示されています:私のスキーマで深さと複数の子を持つ木のFirebaseクエリ

Firebase schema

'をworkLocations' 'excavationWorks' に属し、 'excavationWorksは' 'excavationLists' に属します。私が持っている問題は、私は場所値によってworkLocationsノードを照会することです(のロンドンを言わせて)と親ノードを取得し、特定のworkLocationへのパスがexcavationLists/excavationWorks/workLocations/(specific workLocation)

であることを意味

(赤特定の作業場所のキーである丸付きキー)。

私は多くの投稿を検索して読んでいますが、それを有効にすることはできませんでした。

私のコードは次のようになります。

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 

Query query = reference.child("workLocations").orderByChild("location").equalTo("London"); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot workLoc : dataSnapshot.getChildren()) { 
        // do something with the individual "issues" 
        Log.d(TAG, workLoc.getKey()); 
       } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

は、これを実現するために、あなたに

答えて

1

をありがとう、あなたはこのように二回あなたのデータベースを照会する必要があります。

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference workLocationsRef = reference 
    .child("excavationLists") 
    .child("excavationWorks") 
    .child("workLocations"); 
ValueEventListener valueEventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) { 
      for(DataSnapshot ds : dSnapshot.getChildren()) { 
       String key = ds.getKey(); 

       Query query = workLocationsRef.child(key).orderByChild("location").equalTo("London"); 
       ValueEventListener eventListener = new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot snapshot) { 
         String description = snapshot.child("description").getValue(String.class); 
         Log.d("description", description); 
         String partentKey = snapshot.getRef().getParent().getKey(); 
         Log.d("partentKey", partentKey); 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) {} 
       }; 
       query.addListenerForSingleValueEvent(eventListener); 
      }    
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
workLocationsRef.addListenerForSingleValueEvent(valueEventListener); 
関連する問題