2016-11-08 73 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 

我遵循的火力地堡文档显示的最佳做法,但我的问题是,我想执行一个查询来获取用户的当事人是真实的所有键。 我已经能够查询数据库,以获取特定用户和参与方的基础,使用户名等值等于设定值。

我想最后的查询返回null是

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

的主要问题是,我不知道如何检查双方的真实,有基于该信息的查询。目标是根据其真/假状态创建用户事件的列表。任何帮助或指导,非常感谢。

+0

作为一个侧面说明,......没有必要为用户或partyKey值设置为false。只要删除整个对象({“unique userKey”:false}),当你将它设置为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

非常感谢。第一个函数由于查询中参数太多而引发错误,但第二个函数允许我获取用户的密钥。 – Vulkingzor