首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Firebase实时数据库获取登录用户详细信息

从Firebase实时数据库获取登录用户详细信息
EN

Stack Overflow用户
提问于 2017-10-05 13:51:15
回答 3查看 1.2K关注 0票数 0

我正在使用Firebase实时数据库和注册用户详细信息与电子邮件和密码身份验证。

现在,我可以成功地为注册用户进行登录和注销。

现在,我必须获取当前登录用户的详细信息。我的数据库结构如下:

代码语言:javascript
复制
 {
  "UserInfo : " : {
    "User ID : CxQNTJwnoleIk9M1iYMT9TsrJst2" : {
      "-Kvb_W0YWX7M8dPF7Kn9" : {
        "contact" : "8888888888",
        "email" : "visu@gmail.com",
        "firstname" : "Vish",
        "lastname" : "Mo",
        "password" : "vish",
        "strUserId" : "CxQNTJwnoleIk9M1iYMT9TsrJst2"
      }
    },
    "User ID : e1VCGeshWfOeptzzj4kP1POtmhk2" : {
      "-KvbTM1Jtzn3r9V7II47" : {
        "contact" : "9999999999",
        "email" : "ja@gmail.com",
        "firstname" : "Ja",
        "lastname" : "Mo",
        "password" : "ja123#",
        "strUserId" : "e1VCGeshWfOeptzzj4kP1POtmhk2"
      }
    }
  }
}

例如,如果我使用email: visu@gmail.com登录,那么我想要获取该用户的所有详细信息。

我该怎么做??

是的,我可以得到Email和Displayname,如下所示:

代码语言:javascript
复制
 FirebaseUser user = firebaseAuth.getCurrentUser();
 txtUsername.setText("Welcome, " + user.getDisplayName() + "\n" + user.getEmail());

但是,我想从上面指定的数据库结构中获取该用户的所有详细信息。请给我指引。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-10-05 14:22:38

当你这样做的时候:

代码语言:javascript
复制
FirebaseUser user = firebaseAuth.getCurrentUser();
txtUsername.setText("Welcome, " + user.getDisplayName() + "\n" + user.getEmail());

这只是你的身份验证字段,不是你的数据库。首先,您应该通过以下方式定义这些字段:

代码语言:javascript
复制
private DatabaseReference mDatabase;
// ...
mDatabase = FirebaseDatabase.getInstance().getReference();

在你的数据库结构中:

代码语言:javascript
复制
mDatabase.child("UserInfo : ").child("User ID : CxQNTJwnoleIk9M1iYMT9TsrJst2").child("-Kvb_W0YWX7M8dPF7Kn9").child("contact").getValue();

最后,用简单的word重构你的数据库结构。UserID,电子邮件,密码是多余的,因为它可以被身份验证字段接受。

阅读更多:https://firebase.google.com/docs/database/android/read-and-write

票数 1
EN

Stack Overflow用户

发布于 2017-10-05 14:32:58

尝尝这个。希望这能行得通

代码语言:javascript
复制
FirebaseUser user = firebaseAuth.getCurrentUser();
FirebaseDatabase.getInstance().getReference().child("UserInfo")
     .child(user.getUid())
        .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){
                    UserClass curUser =  dataSnapshot.getValue();
                }

            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
票数 1
EN

Stack Overflow用户

发布于 2017-10-06 16:45:42

最后,我做了如下工作:

代码语言:javascript
复制
private void showData() {
    progressDialog=new ProgressDialog(ProfileActivity.this);
    progressDialog.setMessage("Getting data...");
    progressDialog.show();
    DatabaseReference mDatabase;
    mDatabase = FirebaseDatabase.getInstance().getReference().child("UserInfo : ").child("User ID : " + firebaseAuth.getCurrentUser().getUid());
    ValueEventListener postListener = new ValueEventListener() {

        @Override
        public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
            progressDialog.dismiss();
            User user = dataSnapshot.getValue(User.class);
            txtFname.setText(user.getFirstname());
            txtLname.setText(user.getLastname());
            txtEmail.setText(user.getEmail());
            txtPassword.setText(user.getPassword());
            txtContact.setText(user.getContact());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            progressDialog.dismiss();
            Toast.makeText(ProfileActivity.this, "Couldn't get data.", Toast.LENGTH_SHORT).show();
        }
    };
    mDatabase.addValueEventListener(postListener);
}

创建了一个方法,该方法首先加载ProgressDialog,然后获取一个数据库引用,并通过从FirebaseAuth实例获取UUid将其初始化到我的数据库节点。附加的ValueEventListener和内部方法:onDataChange,使用DataSnapshot的实例为我的User类获取值。并最终将获取的数据显示到我的文本视图中。

感谢大家的努力。投票通过了。

编辑:我的新结构如下:

代码语言:javascript
复制
{
  "UserInfo : " : {
    "User ID : I6wWODplkNXqAhSCRZsH6sjf4mM2" : {
      "contact" : "9999999990",
      "email" : "dhaval@gmail.com",
      "firstname" : "Dhaval",
      "lastname" : "Patel",
      "password" : "dhaval123",
      "strUserId" : "I6wWODplkNXqAhSCRZsH6sjf4mM2"
    },
    "User ID : Nf4kDsxAXYbclt16HahkzsYABWE3" : {
      "contact" : "9999999999",
      "email" : "bandish@gmail.com",
      "firstname" : "Bandish",
      "lastname" : "Mehta",
      "password" : "bandish123",
      "strUserId" : "Nf4kDsxAXYbclt16HahkzsYABWE3"
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46578720

复制
相关文章

相似问题

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