2016-11-08 17 views
1

Google Firebaseを使用して、ゲストリストを含むパーティを持つAndroidアプリケーションをバックアップしています。Firebase Androidが子値の子値を取得する

私は自分のデータを構造化して、ユーザーにパーティー固有キーとtrue/falseを持つ子ノードを持たせ、そのパーティーにユーザー固有キーを持つ子ノードと、関係を示すtrue/falseを持たせます。

users: 
    [unique userKey] 
     userName: coffeeAddict 
     parties: 
      [unique partyKey]: true 
      [unique partyKey]: false 
parties: 
    [unique partyKey]: 
     partyName: Karen's 50th 
     guests: 
      [unique userKey]: true 
      [unique userKey]: false 

私は何Firebaseのマニュアルを参照して、その後は、ベストプラクティスとして示しているが、私の問題は、私が真であるユーザーの当事者のすべてのキーを取得するためにクエリを実行しようとしていますです。 ユーザー名のような値を設定値と同じにすることに基づいて、特定のユーザーとパーティを取得するためにデータベースにクエリを実行できました。

nullを返し、私が試した最後のクエリは

DatabaseReference database = FirebaseDatabase.getInstance().getReference(Constants.PARTIES); 
Query userParty = database.orderByChild("guests/"+ userID).equalTo(true); 

ある主な問題は、私は両側が真であると、その情報に基づいてクエリを持ってチェックする方法がわからないです。目標は、真偽ステータスに基づいてユーザーのイベントのリストを作成することです。どんな助けや指導も大歓迎です。

+0

を、... falseにUSER-またはpartyKey値を設定する必要はありません。 falseに設定すると、オブジェクト全体({"unique userKey":false})を削除するだけです。その後、ゲスト/パーティーのオブジェクト全体を聴くことができます。まだ問題が解決していない場合は、達成したいことを明確にしてください。 – eLwoodianer

答えて

0

ここでは、ゲストのためにどのパーティを照会しているかを知ることを前提にしています。このお試しください:注意点として

final List<String> attendees = new ArrayList<>(); 
Query userParty = database.child(uniquePartyId).child("guests").orderByKey().equalTo(true); 
userParty.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     String userKey = dataSnapshot.getRef().toString(); 
     attendees.add(userKey); 
    } 
    ... 
} 

または

final List<String> attendees = new ArrayList<>(); 
Query userParty = database.child(uniquePartyId).child("guests").orderByKey(); 
userParty.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     String userKey = dataSnapshot.getRef().toString(); 
     Boolean attendParty = (Boolean) dataSnapshot.getValue(); 
     if (attendParty) { 
      attendees.add(userKey); 
     } 
    } 
    ... 
} 
+0

ありがとうございました。最初の関数はクエリのパラメータが多すぎるためにエラーが発生しましたが、2番目の関数はユーザーのキーを取得できました。 – Vulkingzor

関連する問題