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
相关产品推荐
相关产品推荐

