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

Firebase实时数据库推荐码系统开发疑问:如何获取全部refferal键值

解决Firebase Realtime Database获取所有Referral键值的问题

嘿,我来帮你搞定这个问题!你的现有代码是针对单个用户UID节点查询的,所以只能拿到当前用户的Referral数据。如果要获取所有用户(或者某个指定节点下)的Referral相关值,只需要调整查询的起始节点就行,下面给你具体的方案:

假设你的数据库结构

先假设你的用户数据存在users节点下,结构大概是这样:

users
  |--- [uid1]
       |--- refferal_code: "ABC123"
       |--- refferal_status: "active"
  |--- [uid2]
       |--- refferal_code: "XYZ789"
       |--- refferal_status: "used"
  |--- ...

获取所有用户的Referral数据

把查询的起点从单个用户的uid节点改成users根节点,然后遍历所有子节点就能拿到每个用户的Referral信息:

// 指向所有用户的节点
Query query = mDatabase.child("users").orderByChild("refferal_status");
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // 遍历每个用户的节点
        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
            // 将节点数据解析为你的UserModel对象
            UserModel user = userSnapshot.getValue(UserModel.class);
            
            // 提取Referral相关字段
            String referralCode = user.getRefferal_code();
            String referralStatus = user.getRefferal_status();
            String userUid = userSnapshot.getKey(); // 获取当前用户的UID
            
            // 这里可以对拿到的数据做处理,比如打印或存储
            Log.d("ReferralInfo", "UID: " + userUid + " | 推荐码: " + referralCode + " | 状态: " + referralStatus);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // 处理查询失败的情况,比如权限不足或网络问题
        Log.e("ReferralQueryError", "查询失败", databaseError.toException());
    }
});

如果只想收集所有推荐码的值

如果不需要完整的用户数据,只想提取所有refferal_code的值,可以直接遍历子节点的指定字段:

List<String> allReferralCodes = new ArrayList<>();

Query query = mDatabase.child("users");
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
            // 直接获取refferal_code字段的值
            String code = userSnapshot.child("refferal_code").getValue(String.class);
            if (code != null) {
                allReferralCodes.add(code);
            }
        }
        // 现在allReferralCodes里就是所有有效的推荐码了
        Log.d("AllReferralCodes", "所有推荐码: " + allReferralCodes.toString());
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("ReferralQueryError", "查询失败", databaseError.toException());
    }
});

重要提醒:数据库权限

确保你的Firebase Realtime Database规则允许读取users节点的数据,否则查询会失败。测试阶段可以暂时用宽松规则(上线前一定要修改为安全规则):

{
  "rules": {
    "users": {
      ".read": true,
      ".write": true
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:54