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

在Android Studio中使用Firebase实时数据库仅查询当前登录用户的联系人数据

解决只展示当前登录用户联系人的问题

嘿,你已经完成了最核心的铺垫工作——把用户UID和联系人数据关联存储,这一步非常关键!接下来只需要简单调整你的Firebase查询逻辑,就能轻松实现只展示当前登录用户自己的联系人啦。

第一步:调整Firebase查询语句

你提到的orderByChild和equalTo正是实现这个需求的关键,只需要把这两个方法添加到你的查询中,过滤出uid字段与当前登录用户UID匹配的数据即可。

修改后的加载RecyclerView的代码如下:

// 先获取当前登录用户实例,务必做非空判断,避免未登录时的空指针异常
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
if (mUser != null) {
    String currentUserId = mUser.getUid();
    
    // 构建带过滤条件的查询:只获取uid等于当前用户ID的联系人
    FirebaseRecyclerOptions<model> options = new FirebaseRecyclerOptions.Builder<model>()
            .setQuery(
                FirebaseDatabase.getInstance().getReference().child("contacts")
                    .orderByChild("uid") // 指定按数据库中的uid字段排序/过滤
                    .equalTo(currentUserId), // 只保留uid匹配当前用户ID的条目
                model.class
            )
            .build();
    
    myadapter = new myadapter(options);
    recyclerView.setAdapter(myadapter);
} else {
    // 处理用户未登录的场景,比如提示登录、隐藏RecyclerView等
    Toast.makeText(getApplicationContext(), "请先登录查看联系人", Toast.LENGTH_SHORT).show();
}

第二步:补充数据库安全规则(重要!)

为了确保数据安全,避免其他用户通过非法手段获取不属于自己的联系人,一定要在Firebase控制台的实时数据库规则中添加权限校验:

{
  "rules": {
    "contacts": {
      ".read": "auth != null && auth.uid == data.child('uid').val()",
      ".write": "auth != null && auth.uid == newData.child('uid').val()"
    }
  }
}

这个规则的意思是:

  • 只有已登录的用户,且要读取的联系人数据中的uid等于自己的用户ID时,才能读取该数据
  • 只有已登录的用户,且要写入的联系人数据中的uid等于自己的用户ID时,才能写入数据

原理说明

  • orderByChild("uid"):告诉Firebase实时数据库按照contacts节点下每条数据的uid字段进行排序
  • equalTo(currentUserId):进一步筛选出uid字段值与当前登录用户UID完全匹配的条目,这样返回的结果就只有当前用户添加的联系人了

这样调整后,你的RecyclerView就只会加载并展示当前登录用户自己添加的联系人数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:42:44