如何在 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 不显示
如何以编程方式连接到 Android 中的特定 Wi-Fi 网络?