【问题标题】:How to display a list of Groups from Firebase using an Adapter in Android?如何在 Android 中使用适配器显示来自 Firebase 的组列表?
【发布时间】:2017-05-06 18:56:22
【问题描述】:

我正在开发一个使用 Firebase 作为数据库的 Android 应用。 在我的数据库中有用户和组。

Users node of db

每个用户都有一个他/她所属的组列表,每个组都存储为 groupID。 在数据库的另一个节点中,有组列表,每个组的名称、groupImage、...。

Groups node of db

如何使用 FirebaseListAdapter 或其他方式显示给定用户 ID 的用户的组列表(带有名称和图像)?

附言问题不在于使用适配器,而是在获取组的 ID 后,在不访问整个组节点的情况下访问它们

【问题讨论】:

    标签: android firebase firebase-realtime-database android-recyclerview android-adapter


    【解决方案1】:

    您应该使用回收视图和适配器在列表中显示您的所有参数,这是一个创建此类列表的 Android 教程https://developer.android.com/training/material/lists-cards.html

    已编辑:

    您可以对从用户那里获得的每个组 ID 使用此函数:

    public void getGroup(String id)
        {
            groupRef.child(id).addListenerForSingleValueEvent(new ValueEventListener()
            {
    
                @Override
                public void onDataChange(DataSnapshot dataSnapshot)
                {
                     //do something
                     //add data to the list
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError)
                {
                     //do something
                }
            });
        }
    

    【讨论】:

    • 问题不是使用适配器,而是正确读取数据。我可以让 groupIDs 在 user->groups 节点上放置一个侦听器,但是如何在不访问整个组节点的情况下访问组?
    • 您可以像对待用户一样为每个涉及的组 ID 添加一个侦听器,然后在事件调用时添加每个组
    • 非常感谢!我在我的 user->groups 节点中放置了一个监听器,然后在 OnDataChange 中,我为(每个 groupID)做 getGroup(groupID); getGroup 侦听该组并将 Group 对象添加到 HashMap。但是我在代码的哪一点打印列表?我无法在“for”循环之后打印它,因为我的 HashMap 中仍然没有数据(数据是异步读取的)
    • 在get group id函数中,你应该检查这是否是最后一个要添加的组id,然后打印列表。您可以通过检查哈希图大小是否达到所需数量来实现此目的。
    【解决方案2】:

    如果您想使用我在这些屏幕截图中看到的数据库结构来实现这一点,您需要迭代两次。首先,您需要找到用户订阅的所有组。这意味着您需要从 users 节点中找到组 ID。比您需要再次迭代,根据相应的组 id 找到组名称。然后显示您需要的组名列表。

    实现此目的的最简单方法是将group id 更改为group name。这意味着,您只需迭代一次,而不是迭代两次。您的数据库结构应如下所示:

    user
     |
     --- // stuff
     |
     --- groups
           |
           --- group_1: true
           |
           --- group_2: true
           |
           --- group_3: true
           |
           --- group_4: true
           |
           --- group_5: true+
           |
           --- // other stuff
    

    这意味着您可以遍历:users/groups 并实际获取单个用户订阅的组的名称。这些是您需要的组名。

    希望对您有所帮助。

    【讨论】:

    • 一切都好吗?我可以帮助您了解其他信息吗?
    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多