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

Android Studio Firebase查询需求:仅展示与当前用户UID一致的学生数据

实现Firebase查询仅展示当前用户对应学生数据

我来帮你完善这段代码,精准实现只展示和当前用户UID匹配的学生数据需求,具体优化和改动如下:

1. 先做登录状态校验,避免空指针异常

首先要确保当前用户已完成登录,防止fUser为null导致后续操作出错:

final FirebaseUser fUser = FirebaseAuth.getInstance().getCurrentUser();
if (fUser == null) {
    // 处理用户未登录的场景,比如弹出提示或跳转登录页
    Toast.makeText(Parent_LoginActivity.this, "请先完成登录", Toast.LENGTH_SHORT).show();
    return;
}
String currentUserUid = fUser.getUid();

2. 创建带UID过滤条件的Firebase查询

假设你的Students节点下的每个学生对象,都有一个存储用户UID的字段(比如名为uid),我们可以用Firebase的查询API来精准筛选数据:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Students");
// 构建查询:只拉取uid等于当前用户UID的学生数据
Query userSpecificStudentsQuery = ref.orderByChild("uid").equalTo(currentUserUid);

注意:如果你的学生节点中存储UID的字段名不是uid(比如是userId),请替换成实际的字段名称。

3. 监听查询结果并优化RecyclerView更新逻辑

把原来的监听绑定到我们创建的过滤查询上,同时优化Adapter的初始化逻辑(避免在循环内重复创建Adapter,浪费性能):

userSpecificStudentsQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        userList.clear();
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            ModelUser modelUser = ds.getValue(ModelUser.class);
            // 避免空数据加入列表
            if (modelUser != null) {
                userList.add(modelUser);
            }
        }
        // 仅在首次初始化或数据更新时刷新Adapter
        if (adapterUsers == null) {
            adapterUsers = new AdapterUser(Parent_LoginActivity.this, userList);
            recyclerView.setAdapter(adapterUsers);
        } else {
            adapterUsers.notifyDataSetChanged();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        // 处理查询失败的情况,比如打印错误日志
        Log.e("FirebaseQueryError", "查询失败: " + databaseError.getMessage());
    }
});

完整整合代码

把上述步骤整合后的完整代码如下:

final FirebaseUser fUser = FirebaseAuth.getInstance().getCurrentUser();
if (fUser == null) {
    Toast.makeText(Parent_LoginActivity.this, "请先完成登录", Toast.LENGTH_SHORT).show();
    return;
}
String currentUserUid = fUser.getUid();

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Students");
Query userSpecificStudentsQuery = ref.orderByChild("uid").equalTo(currentUserUid);

userSpecificStudentsQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        userList.clear();
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            ModelUser modelUser = ds.getValue(ModelUser.class);
            if (modelUser != null) {
                userList.add(modelUser);
            }
        }
        if (adapterUsers == null) {
            adapterUsers = new AdapterUser(Parent_LoginActivity.this, userList);
            recyclerView.setAdapter(adapterUsers);
        } else {
            adapterUsers.notifyDataSetChanged();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.e("FirebaseQueryError", "查询失败: " + databaseError.getMessage());
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:32:08