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

如何在Firebase中获取数据?获取nama_siswa值无结果求助

解决Firebase获取"nama_siswa"无结果的问题

你的代码里第三层循环是核心问题:for (DataSnapshot valuesiswa:keysiswa.child("nama_siswa").getChildren())。如果nama_siswa是一个直接存储字符串的字段(而非包含子节点的父节点),那它根本没有子节点可以遍历,这就导致这个循环完全不会执行,自然看不到任何日志输出。

修正后的代码

假设你的数据库结构大概是这样(每个顶级节点下包含多个学生节点,每个学生节点直接挂载nama_siswa字段):

你的根节点
└── uniqueKey_1
    ├── siswa_001
    │   └── nama_siswa: "Chandra"
    └── siswa_002
        └── nama_siswa: "Putra"

你可以直接去掉第三层循环,直接读取nama_siswa的值:

myRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot uniqueKey : dataSnapshot.getChildren()) {
            for (DataSnapshot keysiswa : uniqueKey.getChildren()) {
                // 直接获取字段值,指定String类型更安全
                String namaSiswa = keysiswa.child("nama_siswa").getValue(String.class);
                if (namaSiswa != null) { // 避免空指针异常
                    Log.i(TAG, namaSiswa);
                }
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // 别忘了处理读取失败的情况,方便排查问题
        Log.e(TAG, "读取数据库失败", databaseError.toException());
    }
});

额外排查要点

如果修正后还是没结果,你可以检查这几个地方:

  • 数据库结构匹配:登录Firebase控制台确认nama_siswa的路径是否正确,它是不是直接挂在keysiswa节点下的字段,而非嵌套的子节点。
  • 权限规则:检查数据库的安全规则,确保你的应用有读取该节点的权限。比如如果规则设置为仅允许认证用户读取,但你的应用未实现登录,那会被拒绝访问。
  • 引用路径正确:确认myRef指向的是正确的根节点,比如如果学生数据存在/siswa_data路径下,那myRef应该是FirebaseDatabase.getInstance().getReference("siswa_data"),路径错误肯定拿不到数据。

内容的提问来源于stack exchange,提问作者Chandra Febryan Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:45:31