2017-11-26 8 views
0

私はGoogleMaps機能を使用するアプリケーションを持っています。私のアプリケーションでは、2つのマーカーの間にパスを描き、マップ上に通常のマーカーを設定することができます。Android - キーを使用してノードを照会する(Firebase)

私はデータベースの構造は以下の通りである:

  • 一方の経路は、
  • 一つのマーカーは、これを処理するための一つの経路

次のようにIは、データベースの構造を有するを有する複数のマーカーを有することができます

enter image description here

質問:markerIdノードからqueryノードのキーをmarkersノードの適切なマーカーに使用することはできますか?その後、あなたはfor loop内部のキーを取得し、それは同じキーであるかどうかを確認するために、他のクエリでキーを使用し、最初のクエリで

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference reference = database.getReference("routes").child("-KzdUTraH1BodJMuEnSu").child("markerId"); 
ValueEventListener ref=new ValueEventListener(){ 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot data : dataSnapshot.getChildren()){ 
      String x=data.getKey(); 

     DatabaseReference datas=database.getReference().getInstance().child("markers"); 
     datas.orderByKey().equalTo(x).addValueEventListener(new ValueEventListener()){ 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       //code here 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       throw databaseError.toException(); 
      } 
     }); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     throw databaseError.toException(); 
    } 
}; 
reference.addValueEventListener(ref); 

、あなたは場所markerIdに照会されます。

答えて

2

が、これは試します内部ノードmarkers

+0

意味を変更することなく、コードを少し整理しました。私がよく分からないことの1つは 'dataSnapshot.getChildren()'のループです。ネストされたリスナーの後にループが終了することを意味すると思いますが、それは正しいですか? –

+0

@FrankvanPuffelenはい、それは本当です、私はそれを修正しました。ありがとうございました! –

+0

@PeterHaddad、あなたの答えに感謝します。簡単な質問:これは 'マーカーノード 'から' one'マーカーを取得するだけですか、それとも3つすべてを取得しますか? – JDoe

関連する問題