Firebase实时数据库用户分群展示与登录逻辑问题排查
专家页面用户列表消失问题排查
问题背景
需求明确:专家用户登录后,页面应展示普通用户列表;但在判断条件中加入&& currentUser!!.isExpert后,列表完全隐藏。
核心问题分析
你写的判断逻辑搞反了:
if(auth.currentUser?.uid != currentUser?.uid && currentUser!!.isExpert){ expertList.add(currentUser!!) }
这个条件是在筛选「不是当前登录用户的专家用户」,但专家页面需要的是「不是当前登录用户的普通用户」,也就是currentUser.isExpert == false。
另外,currentUser!!存在空指针风险——如果数据库里的用户数据解析失败,currentUser会是null,直接用!!会导致崩溃,建议补上空安全判断。
修正后的代码
把判断条件改成筛选普通用户,同时增加空安全处理:
for(postSnapshot in snapshot.children){ val currentUser = postSnapshot.getValue(User::class.java) // 先判断currentUser不为null,再筛选:不是当前用户 + 是普通用户 if(currentUser != null && auth.currentUser?.uid != currentUser.uid && !currentUser.isExpert){ expertList.add(currentUser) } }
额外建议
- 数据库中手动创建专家账号时,确保
isExpert字段是布尔值true,而非字符串或其他类型,否则Gson解析会使用默认值false。 - 可以在数据库层面做查询优化,直接过滤普通用户,减少客户端遍历:
dbRef.child("user").orderByChild("isExpert").equalTo(false).addValueEventListener(...)
这样就不用在客户端逐个判断isExpert,效率更高。
内容的提问来源于stack exchange,提问作者Kushal Sharma
相关产品推荐
相关产品推荐

