代码之家  ›  专栏  ›  技术社区  ›  rafaelmorais

使用Android中的Firebase选择所有具有数组中键的子级

  •  0
  • rafaelmorais  · 技术社区  · 9 年前

    假设我有以下Firebase数据库结构:

    {
        "projects": {
            "p01": {
                "name": "Projecto #1",
                "created_at": "2017-01-01 20:00:00",
                "tags": {
                    "t01": true,
                    "t03": true
                }
            },
            "p02": {
                "name": "Projecto #2",
                "created_at": "2017-02-01 02:20:33",
                "tags": {
                    "t02": true,
                }
            }
        },
        "tags": {
            "t01": {
                "color": "#000CCC",
                "name": "Nature"
            },
            "t02": {
                "color": "#DD00FF",
                "name": "Technology"
            },
            "t03": {
                "color": "#438DC2",
                "name": "Social"
            }
        }
    }
    

    我想显示一个包含所有项目的列表视图,在每一行上我想显示项目的标题和带有背景色的标记列表。我也做到了,但我认为我实现它的方式并不是最好的做法。

    首先,我创建一个值事件侦听器来获取所有项目,如下所示:

    fbdRef.child("projects").addValueEventListener(new ValueEventListener() {
    

    在 onDataChange 我有一个for循环,用于读取所有项目并将其添加到ArrayList中,但在该循环中,我首先异步执行一些操作。类似这样:

    for(DataSnapshot tagSnapshot: projectSnapshot.child("tags").getChildren()){
         fbdRef.child("tags/" + tagSnapshot.getKey()).addValueEventListener(new ValueEventListener() {
    

    从每个项目中获取所有标签内容的最佳方法是什么?

    1 回复  |  直到 9 年前
        1
  •  2
  •   cutiko    9 年前

    reference.child("projects").addChildEventListener(...);
    

    然后,对于每个添加、移动或删除的子级,将其传递给适配器并更新适配器。

    由于您可能不想处理每种情况,Firebase Ui库提供了一个适配器来显示列表: https://github.com/firebase/FirebaseUI-Android

    Project 模型在Firebase中构建数据的关键是思考视图需要什么。避免不必要的嵌套和额外的查询。