【问题标题】:How can I get child value in Firebase database with android? [duplicate]如何使用 android 在 Firebase 数据库中获取子值? [复制]
【发布时间】:2020-01-21 19:31:46
【问题描述】:

Previously,我要求在 firebase 中获取数据。但我无法获得价值……我的数据库是这样的。

{Singer :
    {Eminem :
        {01 :
            songName : "Rap god",
            songType : "type01"
        },
        {02 :
            songName : "Till I collapse",
            songType : "type02"
        }
    },
    {Lauv :
        {01 :
            songName : "I Like Me Better",
            songType : "type01"
        },
        {02 :
            songName : "lonely",
            songType : "type03"
        }
    },
    {Alan Walker :
        {01 : 
            songName : "All Falls Down",
            songType : "type02"
        },
        {02 :
            songName : "On My Way",
            songType : "type01"
        }
    }  
}            

我想在Singer 中获取所有type01。我试过这样的代码

@Override
public void onBindViewHolder(@NonNull MyHolder holder, int i) {
    ...
    Query myQuery = FirebaseDatabase.getInstance().getReference().child("Singer").orderByChlid("songType").equalsTo("type01");
    FirebaseRecyclerOption.Builder<ItemModel>.setQuery(myQuery, new SanpshotParser<ItemModel>() {
        @NonNull
        @Override
        public ItemModel parseSnapshot(@NonNull DataSnapshot snapshot) {
            String songStr = snapshot.child("songName").getValue().toString();
            String typeStr = snapshot.child("songType").getValue().toString();

            return new ItemModel(songStr, typeStr);
        }
    }).build();
    ...
}

但我无法得到我想要的。 FirebaseDatabase.getInstance().getReference().child("Singer").orderByChild("songType").equalsTo("type01") 无法读取函数 parseSnapshot 中的数据。如何获取所有歌手类型为type01的歌曲?

【问题讨论】:

  • 您试图从上面的查询中检索 child 的孩子。所以它不会像你预期的那样工作。甚至 frank van puff 在他的answer
  • 在我之前的回答中,我给了你两个选项:1) 构建你自己的适配器,2) 将你的数据结构更改为歌曲的平面列表,以便 FirebaseUI 可以使用它。您似乎在这里都没有做,这就是它不起作用的原因。

标签: java android firebase firebase-realtime-database


【解决方案1】:

您需要更深入一步,以便查询可以访问songType

FirebaseDatabase.getInstance().getReference().child("Singer").child("Eminem").orderByChild("songType").equalsTo("type01")

【讨论】:

  • 我建议使用recyclerview 来检索歌手列表。然后获取每个歌手名的onClick检索type01歌曲
  • 我的主意太好了
  • 似乎每个歌手只有/最多一首歌type01。因此,为每位歌手展示 可能是有意义的。只是 OP 使用的数据结构不适合使用 FirebaseUI 来做到这一点,这就是为什么我建议使用平面数据结构来回答他们之前的问题。
猜你喜欢
  • 2020-01-23
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多