【问题标题】:android firebase database: how to get all nodes that are in a set of valuesandroid firebase数据库:如何获取一组值中的所有节点
【发布时间】:2018-05-17 10:33:13
【问题描述】:

我正在尝试检索用户的朋友列表,以便可以在列表视图中显示他们。在我的 firebase 数据库中,朋友和用户信息的结构如下:

所以基本上,我想获取朋友部分中列出的用户 ID 并查询我的用户数据以获取该组用户 ID 中每个节点下的所有信息。如何使用 android firebase 数据库 sdk 查询来实现这一点?我希望能够在单个数据库查询中检索所有用户。

谢谢。

【问题讨论】:

标签: android database list firebase firebase-realtime-database


【解决方案1】:

您无法在单个查询中获取该数据,您需要查询您的数据库两次。这是 Firebase 的常见做法。假设 friendsusers 节点是您的 Firebase 根的直接子节点,要实现这一点,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference friendIdRef = rootRef.child("friends").child(friendId)
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = ds.getKey();

            DatabaseReference usersRef = rootRef.child("users").child(key);
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
                        String username = dSnapshot.child("username").getValue(String.class);
                        Log.d("TAG", username);
                    }
                }

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

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
friendIdRef.addListenerForSingleValueEvent(valueEventListener);

它将打印这些特定用户的所有用户名。还有一点需要注意的是,你不需要在你的数据库中添加那些值为false的朋友,只需要那些值为true的朋友。

【讨论】:

    猜你喜欢
    • 2019-05-24
    • 1970-01-01
    • 2019-09-28
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多