首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检索和显示已登录用户的数据- Firestore

如何检索和显示已登录用户的数据- Firestore
EN

Stack Overflow用户
提问于 2019-05-22 11:59:54
回答 2查看 4.3K关注 0票数 1

我正在尝试在用户登录时获取并显示他们的信息。(即:姓名、电子邮件、电话)

我尝试了在youtube和堆栈溢出上找到的多个代码片段,但它们都失败了。大多数教程使用实时数据库,这不是我正在寻找的。

我还尝试过创建一个"users“对象。

代码语言:javascript
复制
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中的文档与用户没有关联,但我不知道如何设置我的代码,使它只检索用户的数据是在*它工作良好的新创建的帐户,但如果我登出并登录到一个不同的用户,它将不会更新“帐户/用户信息”。

简而言之,我如何访问和显示登录用户的数据库信息?

附加说明:我正在使用电子邮件和密码进行身份验证

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-26 03:43:51

在努力寻找解决方案的几天后,我找到了一个能够从数据库中检索用户信息的解决方案。但是,重要的是要注意,因为我的应用程序没有保存大量数据,所以这种结构适合我。

因此,我基本上是在正确的轨道上,但由于缺乏对firebase的理解,我错过了一些概念。

代码语言:javascript
复制
    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。

代码语言:javascript
复制
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>() {

注意:我相信你也可以把它添加到你的哈希表中,如果你这样做的话。

票数 1
EN

Stack Overflow用户

发布于 2019-05-22 12:12:46

要访问存储在Firestore中的用户数据,它不应该像您想象的那么复杂,不需要查询,您只需要获取与用户的uid相对应的文档,并获取特定字段或对它们执行任何您需要的操作,如下所示:

代码语言:javascript
复制
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。使用此命令检索当前登录用户:

代码语言:javascript
复制
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

然后,您可以使用以下内容获取名称和电子邮件:

代码语言:javascript
复制
String name = user.getDisplayName();
String email = user.getEmail();

有关详细信息,请参阅documentation

如果FirebaseAuth不能解析,这可能意味着你没有正确地遵循设置指南,并且忘记在你的gradle文件中包含依赖项:

代码语言:javascript
复制
implementation 'com.google.firebase:firebase-auth:17.0.0'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56249121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档