Firebase Android获取子值的子值

时间:2016-11-08 21:24:41

标签: android firebase firebase-realtime-database

我正在使用Google Firebase支持Android应用程序,该应用程序包含访客列表。

我的数据结构是让用户拥有一个带有Party唯一密钥和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);

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

1 个答案:

答案 0 :(得分: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);
        }
    }
    ...
}