You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在未知ID的情况下从Firebase读取数据?

如何在未知ID的情况下读取Firebase中operations列表的数据?

我有一个operations列表,每个子节点都包含自动生成的ID,现在想在不知道这些ID的前提下读取列表中的数据,数据库结构如下:
数据库结构

我写了一段代码但无法正常运行:

myRef.child("Анна Валерьевна").child("operations").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        String s = "";
        for (DataSnapshot ds : snapshot.getChildren()){
            if (snapshot.child("name").getValue(String.class) != null) {
                s = snapshot.child("name").getValue(String.class);
            }
            adapter.add(s);
        }
    }
    @Override
    public void onCancelled(@NonNull DatabaseError error) {
    }
});

问题分析

你的代码核心错误是循环里误用了外层的snapshot而非循环变量ds:

  • snapshot指向的是operations节点本身,这个节点下并没有name字段;
  • 循环中的ds才是operations下每个带自动ID的子节点,你需要从ds中读取name字段。

修正后的代码

myRef.child("Анна Валерьевна").child("operations").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for (DataSnapshot ds : snapshot.getChildren()){
            // 从当前循环的子节点ds中读取name字段
            String name = ds.child("name").getValue(String.class);
            if (name != null) {
                adapter.add(name);
            }
        }
    }
    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // 建议添加错误日志,方便排查问题
        Log.e("FirebaseError", "读取数据失败", error.toException());
    }
});

额外建议

  • 如果operations下的子节点有固定数据结构,可以创建对应的实体类(比如Operation),用ds.getValue(Operation.class)直接反序列化,代码会更简洁易维护;
  • 不要忽略onCancelled方法,添加错误处理能帮你快速定位权限不足、网络异常等问题。

内容的提问来源于stack exchange,提问作者Nuriya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:54:58