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

如何从Firebase Database获取所有用户ID?附HashMap存储代码

如何从Firebase Realtime Database中检索所有用户ID?

问题背景

我已经用HashMap将用户数据保存至Firebase Database,用户数据按ID排序,保存代码大致如下:

emailauth = FirebaseAuth.getInstance();
donorid= emailauth.getCurrentUser().getUid();
mrefrnce= FirebaseDatabase.getInstance().getReference().child("Users").child("Donor").child(donorid);
HashMap hmap= new HashMap();
hmap.put("user_name",usern);
hmap.put("bloodgroup",bld);
hmap.put("user_address",address);
hmap.put("user_type","Blood Donor");
mrefrnce.updateChildren(hmap).addOnCompleteListener(...);

现在需要咨询如何从该Firebase Database中检索所有用户ID。


解决方案

要获取所有捐赠者的用户ID,核心思路是直接访问Users/Donor节点,遍历它的所有子节点——每个子节点的key就是你保存数据时用的用户ID(也就是donorid)。下面给你两种常用的实现方式:

1. 实时监听版本(自动更新数据)

这个版本会实时监听Donor节点的变化,一旦有用户新增、删除或信息修改,都会自动更新用户ID列表:

// 获取Donor节点的根引用
DatabaseReference donorRootRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Donor");

// 创建值事件监听器
ValueEventListener donorListener = new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        List<String> allDonorIds = new ArrayList<>();
        
        // 遍历所有子节点,提取每个节点的key(即用户ID)
        for (DataSnapshot donorSnapshot : dataSnapshot.getChildren()) {
            String userId = donorSnapshot.getKey();
            allDonorIds.add(userId);
            
            // 如果你需要同时获取该用户的详细数据,可以在这里解析:
            // DonorModel donor = donorSnapshot.getValue(DonorModel.class);
        }
        
        // 这里可以处理获取到的ID列表,比如打印到日志、更新UI等
        Log.d("FirebaseData", "所有捐赠者ID: " + allDonorIds);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        // 处理数据读取失败的情况
        Log.e("FirebaseError", "读取用户ID失败", databaseError.toException());
    }
};

// 添加监听器到节点
donorRootRef.addValueEventListener(donorListener);

2. 单次读取版本(非实时)

如果只需要一次性获取当前所有用户ID,不需要实时更新,可以使用addListenerForSingleValueEvent,读取完成后会自动移除监听器,更节省资源:

donorRootRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        List<String> allDonorIds = new ArrayList<>();
        for (DataSnapshot donorSnapshot : dataSnapshot.getChildren()) {
            allDonorIds.add(donorSnapshot.getKey());
        }
        // 在这里处理获取到的ID列表
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        // 处理读取失败的异常
        Log.e("FirebaseError", "读取用户ID失败", databaseError.toException());
    }
});

额外注意事项

  • 如果你用了实时监听器,记得在页面销毁时(比如Activity的onDestroy方法)移除监听器,避免内存泄漏:
    @Override
    protected void onDestroy() {
        super.onDestroy();
        donorRootRef.removeEventListener(donorListener);
    }
    
  • 确保你的Firebase数据库规则允许读取Users/Donor节点,否则会出现权限被拒绝的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:35:19