android - 如何检索和显示已登录用户的数据 - Firestore
问题描述
我试图在他们登录时获取并显示我的用户信息。(即:姓名、电子邮件、电话)
我尝试了在 youtube 和堆栈溢出中找到的多个片段,但它们都失败了。大多数教程使用实时数据库,这不是我想要的。
我也尝试过制作“用户”对象。
private void getData(){
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("users")
//.document(FirebaseAuth.getInstance().getCurrentUser().getUid())
.whereEqualTo("email:", FirebaseAuth.getInstance().getCurrentUser().getUid())
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
//Toast.makeText(getApplicationContext(),document.getId() +"==>" + document.getData(),Toast.LENGTH_LONG).show();
//Toast.makeText(getApplicationContext(),""+ document.get("Email") ,Toast.LENGTH_LONG).show();
nameEdt.setText((CharSequence) document.get("First Name"));
emailEdt.setText((CharSequence) document.get("Email"));
phoneEdt.setText((CharSequence) document.get("Phone"));
}
} else {
Toast.makeText(getApplicationContext(),"No such document",Toast.LENGTH_LONG).show();
}
}
});
}
我知道firestore中的文档与用户无关,但我不知道如何设置我的代码,以便它只从登录的用户那里检索数据*它适用于新创建的帐户,但如果我要登录退出并使用其他用户登录,它不会更新“帐户/用户信息”。
简而言之,我将如何访问和显示登录用户的数据库信息?
附加说明:我使用电子邮件和密码进行身份验证
解决方案
要访问您存储在 Firestore 中的用户数据,它不应该像您想象的那么复杂,不需要查询,您只需要获取与用户的 uid 对应的文档,然后获取特定字段或对它们进行任何您需要的操作, 像这样:
db.collection("users").document(FirebaseAuth.getInstance().getCurrentUser().getUid())
.get().addOnCompleteListener(task -> {
if(task.isSuccessful() && task.getResult() != null){
String firstName = task.getResult().getString("First Name");
String email = task.getResult().getString("Email");
String phone = task.getResult().getString("Phone");
//other stuff
}else{
//deal with error
}
});
原答案:
用户信息不存储在 Firestore 数据库中,它们与您为登录设置的 Firebase 身份验证相关联。要检索相关的用户信息,您需要使用相关的FirebaseAuth
API。使用它来检索当前登录用户:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
然后您可以使用以下内容获取名称和电子邮件:
String name = user.getDisplayName();
String email = user.getEmail();
有关详细信息,请参阅文档。
如果FirebaseAuth
没有解决,这可能意味着您没有正确遵循设置指南并忘记在您的 gradle 文件中包含依赖项:
implementation 'com.google.firebase:firebase-auth:17.0.0'
推荐阅读
- python - mininet_wifi iperf 无法设置
- c# - 是否可以在单个测试用例中结合桌面测试和 Web 测试
- asp.net-mvc - 如何将 Azure Active Directory 身份验证添加到 Razor Pages 应用程序?
- regex - 匹配字符串的开头并排除正则表达式中的字符串结尾
- ios - AVCapturePhoto SemanticSegmentationMatte nil 没有音频输入?
- mapbox - 如何为地理定位控制启用动画?
- c++ - 在带有 std::unique_ptr 的类赋值运算符中,
- java - 为什么滚动时 RecyclerView (在我的情况下)中 CardView 的内容会发生变化?
- ios - 在 PHPickerViewController 中被选中后如何获取照片数据/元数据?
- mysql - 如何从 MySQL 列中的 JSON 文档中获取最新值?