我正在使用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登录,那么我想要获取该用户的所有详细信息。
我该怎么做??
是的,我可以得到Email和Displayname,如下所示:
FirebaseUser user = firebaseAuth.getCurrentUser();
txtUsername.setText("Welcome, " + user.getDisplayName() + "\n" + user.getEmail());但是,我想从上面指定的数据库结构中获取该用户的所有详细信息。请给我指引。谢谢。
发布于 2017-10-05 14:22:38
当你这样做的时候:
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();最后,用简单的word重构你的数据库结构。UserID,电子邮件,密码是多余的,因为它可以被身份验证字段接受。
阅读更多:https://firebase.google.com/docs/database/android/read-and-write
发布于 2017-10-05 14:32:58
尝尝这个。希望这能行得通
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) {
}
});发布于 2017-10-06 16:45:42
最后,我做了如下工作:
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类获取值。并最终将获取的数据显示到我的文本视图中。
感谢大家的努力。投票通过了。
编辑:我的新结构如下:
{
"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"
}
}https://stackoverflow.com/questions/46578720
复制相似问题