如何在Xamarin Android Firestore中获取字段值与当前用户全名
Xamarin Android 读取Firestore当前用户指定字段(全名)实现
根据你已实现的Firebase Auth登录态获取逻辑,结合你给出的Firestore用户数据存储结构(users根集合下以用户邮箱作为文档ID,文档内fullname字段存储用户全名),可以按以下方式实现:
前置依赖
首先确认项目已经安装Nuget包Xamarin.Firebase.Firestore,且Firebase基础初始化逻辑已完成。
实现代码
直接在账号页的生命周期方法(比如OnCreate)里加入以下逻辑:
// 获取Firestore数据库实例 var firestoreDb = FirebaseFirestore.Instance; // 拿到当前登录用户的邮箱(复用你已实现的逻辑) var currentEmail = FirebaseAuth.Instance.CurrentUser.Email; try { // 定位对应用户的文档路径 DocumentReference userDoc = firestoreDb.Collection("users").Document(currentEmail); // 异步拉取文档快照 var snapshot = await userDoc.GetAsync(); if (snapshot.Exists()) { // 读取fullname字段值,字段名需和Firestore中存储的键名完全一致(大小写敏感) string userFullName = snapshot.GetString("fullname"); // 切主线程更新UI RunOnUiThread(() => { // 你已有的邮箱赋值逻辑 AccountEmailText.Text = $"Email: {currentEmail}"; // 新增全名赋值逻辑 AccountFullNameText.Text = $"Full Name: {userFullName}"; }); } else { RunOnUiThread(() => Toast.MakeText(this, "未查询到当前用户信息", ToastLength.Short).Show()); } } catch (Exception e) { RunOnUiThread(() => Toast.MakeText(this, $"用户信息加载失败:{e.Message}", ToastLength.Short).Show()); }
注意事项
- 如果你的
users集合下的文档ID不是用户邮箱,而是Firebase Auth生成的用户Uid,只需要把取文档的参数从currentEmail替换为FirebaseAuth.Instance.CurrentUser.Uid即可 - Firestore的网络请求默认在后台线程执行,所有UI更新操作必须通过
RunOnUiThread切到主线程,否则会触发线程访问异常 - 请确保Firestore安全规则配置正确,给已登录用户开放自身文档的读权限,避免权限不足导致拉取失败
- 字段名严格区分大小写,如果你的存储字段名是驼峰格式
fullName,代码里的GetString参数也要对应修改,否则会取到空值
内容的提问来源于stack exchange,提问作者Ye LIN Tun Net
相关产品推荐
相关产品推荐

