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

如何在Firebase数据库中获取所有用户名称(不使用'usuarios'子节点)

解决Firebase获取所有用户名称的问题

嘿,别着急,我来帮你搞定这个小问题!

首先看你的代码,问题出在你在循环里硬编码了luisito这个具体的用户节点,还重复访问了usuarios子节点,这就导致循环没起到遍历所有用户的作用,只能拿到单个用户的名字。结合你的数据库结构(所有用户都存在usuarios节点下,每个子节点是一个用户ID,里面包含nombre字段),我们可以调整代码来实现需求:

正确的实现代码

首先确保你的数据库引用指向usuarios节点:

// 获取指向usuarios节点的引用
DatabaseReference usuariosRef = FirebaseDatabase.getInstance().getReference("usuarios");

然后修改监听器逻辑,遍历所有用户节点并提取名称:

usuariosRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // 遍历usuarios下的每一个用户节点
        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
            // 直接从当前用户节点中获取nombre字段
            String userName = userSnapshot.child("nombre").getValue(String.class);
            
            // 做个非空判断,避免空指针异常
            if (userName != null) {
                Toast.makeText(UsuariosEnLineaActivity.this, userName, Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // 别忘了处理数据获取失败的情况
        Toast.makeText(UsuariosEnLineaActivity.this, "获取用户数据失败:" + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
    }
});

代码说明

  • dataSnapshot.getChildren()会返回usuarios节点下的所有子节点(也就是每一个用户的节点),循环里的userSnapshot就代表单个用户的全部数据。
  • 直接通过userSnapshot.child("nombre")就能拿到该用户的名称,不需要再指定具体的用户名(比如luisito),这样就能遍历获取所有用户的名字了。

另外你提到“不使用'usuarios'子节点”,如果是不想在代码里硬写节点名称,可以把它定义成一个常量,比如:

private static final String USUARIOS_NODE = "usuarios";
DatabaseReference usuariosRef = FirebaseDatabase.getInstance().getReference(USUARIOS_NODE);

这样后续修改节点名称时只需要改常量即可,更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:07:51