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

Firebase查询异常:无法显示当前用户已订阅的群组

问题:无法获取用户已订阅的群组数据

需要展示当前用户已订阅的群组,用户ID存储在群组的Members子节点中,但在主Activity中使用if条件后无法获取到任何群组数据。

错误代码片段

if (snapshot.child("Members").child(FirebaseAuth.getInstance().getUid()).exists());

完整错误代码

FirebaseDatabase.getInstance().getReference().child("Groups").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        list.clear();
        
        for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
            if (dataSnapshot.exists()) {
                if (snapshot.child("Members").child(FirebaseAuth.getInstance().getUid()).exists());

                Group group = dataSnapshot.getValue(Group.class);
                list.add(group);
            }
        }

        adapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {

    }
});

问题分析

  • 循环内判断用户是否在群组Members中时,错误使用了根快照snapshot,应该使用当前遍历到的群组快照dataSnapshot,否则会一直检查根节点下的Members,而非当前群组的Members。
  • if条件末尾多了分号;,导致判断逻辑完全无效,不管条件是否成立,都会执行后续的添加群组操作。

修正后的代码

FirebaseDatabase.getInstance().getReference().child("Groups").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        list.clear();
        String currentUserId = FirebaseAuth.getInstance().getUid();
        
        for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
            // 检查当前群组的Members节点是否包含当前用户ID
            if (dataSnapshot.child("Members").child(currentUserId).exists()) {
                Group group = dataSnapshot.getValue(Group.class);
                list.add(group);
            }
        }

        adapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // 可添加错误处理逻辑
    }
});

修正说明

  1. 将判断条件中的snapshot替换为dataSnapshot,确保检查的是当前遍历到的群组下的Members节点。
  2. 移除if条件末尾的分号,让条件逻辑生效,只有当用户在当前群组的Members中时,才将群组添加到列表。
  3. 提前获取当前用户ID,避免重复调用FirebaseAuth.getInstance().getUid(),提升代码简洁性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:11:40