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

Android Studio Java中Firebase Firestore查询:获取用户用户名问题

获取Firestore中当前用户的用户名并显示到文本框

嘿,我来帮你搞定这个问题!你已经搭好了查询的基础框架,接下来只需要给这个查询添加结果监听,就能拿到对应的用户名并显示到文本框里啦。

核心实现步骤

你可以通过get()方法一次性获取查询结果,或者用addSnapshotListener实时监听数据变化(比如用户修改用户名时自动更新文本框),下面是两种场景的代码示例:

1. 一次性获取用户名(适合只需要加载一次的场景)

private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference usersRef; // 建议变量名贴合集合名,比如usersRef而非noteRef

// 先判断用户是否已登录,避免空指针异常
if (mAuth.getCurrentUser() != null) {
    String currentUid = mAuth.getCurrentUser().getUid();
    usersRef = db.collection("users");
    Query query = usersRef.whereEqualTo("uid", currentUid);

    // 执行查询并处理结果
    query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                // 每个uid对应唯一用户,遍历结果取第一个文档即可
                for (QueryDocumentSnapshot document : task.getResult()) {
                    // 这里的"username"要和你Firestore中存储用户名的字段名完全一致
                    String username = document.getString("username");
                    // 将用户名设置到你的文本框中,替换成实际的控件变量名
                    yourUsernameTextView.setText(username);
                }
            } else {
                // 处理查询失败的情况,比如打印错误日志
                Log.e("FirestoreError", "查询用户信息失败", task.getException());
            }
        }
    });
} else {
    // 用户未登录时的处理逻辑,比如提示登录或跳转到登录页面
    Toast.makeText(this, "请先登录", Toast.LENGTH_SHORT).show();
}

2. 实时监听用户名变化(适合需要实时更新的场景)

如果你的应用需要在用户修改用户名后自动更新文本框内容,可以用快照监听代替一次性获取:

if (mAuth.getCurrentUser() != null) {
    String currentUid = mAuth.getCurrentUser().getUid();
    usersRef = db.collection("users");
    Query query = usersRef.whereEqualTo("uid", currentUid);

    // 添加实时监听
    ListenerRegistration listener = query.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
            if (error != null) {
                Log.e("FirestoreError", "监听用户信息失败", error);
                return;
            }

            // 处理更新后的快照数据
            for (QueryDocumentSnapshot document : value) {
                String username = document.getString("username");
                yourUsernameTextView.setText(username);
            }
        }
    });

    // 记得在页面销毁时移除监听,避免内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (listener != null) {
            listener.remove();
        }
    }
}

关键注意事项

  • 确保Firestore中users集合的字段名和代码中document.getString("username")的参数一致,比如你存的是customName就改成对应名称。
  • 必须先判断mAuth.getCurrentUser()不为null,否则会触发空指针异常。
  • 使用实时监听时,一定要在页面销毁时移除监听,防止内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:37:49