我正在尝试在用户登录时获取并显示他们的信息。(即:姓名、电子邮件、电话)
我尝试了在youtube和堆栈溢出上找到的多个代码片段,但它们都失败了。大多数教程使用实时数据库,这不是我正在寻找的。
我还尝试过创建一个"users“对象。
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中的文档与用户没有关联,但我不知道如何设置我的代码,使它只检索用户的数据是在*它工作良好的新创建的帐户,但如果我登出并登录到一个不同的用户,它将不会更新“帐户/用户信息”。
简而言之,我如何访问和显示登录用户的数据库信息?
附加说明:我正在使用电子邮件和密码进行身份验证
发布于 2019-05-26 03:43:51
在努力寻找解决方案的几天后,我找到了一个能够从数据库中检索用户信息的解决方案。但是,重要的是要注意,因为我的应用程序没有保存大量数据,所以这种结构适合我。
因此,我基本上是在正确的轨道上,但由于缺乏对firebase的理解,我错过了一些概念。
private void getData(){
FirebaseFirestore db = FirebaseFirestore.getInstance();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final String current = user.getUid();//getting unique user id
db.collection("users")
.whereEqualTo("uId",current)//looks for the corresponding value with the field
// in the database
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
nameEdt.setText((CharSequence) document.get("firstName"));
emailEdt.setText((CharSequence) document.get("email"));
phoneEdt.setText((CharSequence) document.get("phone"));
// These values must exactly match the fields you have in your db
}
}
如前所述,文档并不与用户相关联,但是您可以通过在数据库中创建一个名为"whatever want“的字段(i made uId)来将它们链接在一起。这是因为firebase在进行身份验证时会为每个用户生成一个唯一的id。通过创建一个包含该唯一id的字段,您能够检索该集合中的相关信息。
如何创建字段:我创建了一个"user“对象,该对象将从我的编辑文本中获取uid。在我的代码中,我在创建/验证新用户/帐户时传递了uid。
FirebaseUser testUser = FirebaseAuth.getInstance().getCurrentUser(); //getting the current logged in users id
String userUid = testUser.getUid();
String uidInput = userUid;
User user = new User(firstNameInput,lastNameInput,uidInput);
db.collection("users").document(userUid)
.set(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
注意:我相信你也可以把它添加到你的哈希表中,如果你这样做的话。
发布于 2019-05-22 12:12:46
要访问存储在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();
有关详细信息,请参阅documentation。
如果FirebaseAuth
不能解析,这可能意味着你没有正确地遵循设置指南,并且忘记在你的gradle文件中包含依赖项:
implementation 'com.google.firebase:firebase-auth:17.0.0'
https://stackoverflow.com/questions/56249121
复制相似问题