如何在 Android 中使用适配器显示来自 Firebase 的组列表?

Posted

技术标签:

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

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

Users node of db

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

Groups node of db

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

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

【问题讨论】:

【参考方案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 并实际获取单个用户订阅的组的名称。这些是您需要的组名。

希望对您有所帮助。

【讨论】:

一切都好吗?我可以帮助您了解其他信息吗?

以上是关于如何在 Android 中使用适配器显示来自 Firebase 的组列表?的主要内容,如果未能解决你的问题,请参考以下文章

解析来自 JSON 服务器的数据时,Android ListView 不显示

如何使用 SQL 适配器在 Worklight 中显示数据

( 转)Android之自定义适配器

如何以编程方式连接到 Android 中的特定 Wi-Fi 网络?

在 android Studio 中,我希望当我点击按钮时,下一个活动/片段应该来自右侧

Android Listview 未更新