首页 文章

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

提问于
浏览
0

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

现在,我可以成功登录并注册注册用户 .

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

{
  "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登录,那么我想获得该用户的所有详细信息 .

我该怎么做 ??

Ya,我可以获得Email和Displayname,如下所示:

FirebaseUser user = firebaseAuth.getCurrentUser();
 txtUsername.setText("Welcome, " + user.getDisplayName() + "\n" + user.getEmail());

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

3 回答

  • 1

    你这样做的时候:

    FirebaseUser user = firebaseAuth.getCurrentUser();
    txtUsername.setText("Welcome, " + user.getDisplayName() + "\n" + user.getEmail());
    

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

    private DatabaseReference mDatabase;
    // ...
    mDatabase = FirebaseDatabase.getInstance().getReference();
    

    在您的数据库结构中:

    mDatabase.child("UserInfo : ").child("User ID : CxQNTJwnoleIk9M1iYMT9TsrJst2").child("-Kvb_W0YWX7M8dPF7Kn9").child("contact").getValue();
    

    最后,用简单的单词重构你的数据库结构 . UserID,Email,Password是冗余的,因为Authentication Field可以使用它 .

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

  • 1

    试试这个 . 希望这会奏效

    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) {
    
                }
            });
    
  • 0

    最后,我做了如下:

    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 类的值 . 最后将获取的数据显示到我的textviews .

    谢谢大家的努力 . upvoted .

    EDIT :我的新结构如下:

    {
      "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"
        }
    }
    

相关问题