我使用firebase电子邮件/密码身份验证进行登录。我使用用户节点来存储用户数据。我可以使用共享首选项将身份验证Uid传递给不同的活动。如何通过使用此UId获取姓名,电话等用户信息?
注意:用户信息存储在用户节点中,UId来自身份验证。
我尝试了以下方法,但是UName,UMobile和UEmail显示空值。我可以正确地获得UId。
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser() ;
String UId = currentUser.getUid();
String UName = currentUser.getDisplayName();
String UMobile = currentUser.getPhoneNumber();
String UEmail = currentUser.getEmail();
答案 0 :(得分:1)
存储用户数据时,请使用uid存储它。就像json对象一样。 uid作为键和用户数据作为值。然后,您可以使用此uID获取firebaseDatabasereference。
{
"users": {
"uid_of_first_user": {
"username": "usernam",
"email": "bobtony"
},
"uid_of_second_user": {
"username": "usernam",
"email": "bobtony"
},
}}
使用以下代码获取值
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("users/uid_of_first_user");
// Read from the database
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
User value = dataSnapshot.getValue(User.class);
Log.d(TAG, "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
创建User.class。每个变量名称必须与firebase中的相同。并且也不要忘记创建默认构造函数。就像下面一样
public class User {
String username;
String email;
public User() {
}
public User(String username, String email) {
this.username = username;
this.email = email;
}
}
如果您想获取所有用户数据。请遵循以下代码。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("users");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
// TODO: handle the post
User value = userSnapshot.getValue(User.class);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
});
答案 1 :(得分:0)
请查看本指南,注意FirebaseAuth.AuthStateListener()
如果您使用UID和其他自定义字段将用户存储在节点中,那么您将无法使用FirebaseAuth获取它们。 您需要使用此UID查询保存用户的树并解析用户数据快照。 只能使用FirebaseAuth检索UID。
答案 2 :(得分:0)
覆盖onAuthStateChanged侦听器:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() != null) {
//show_snackbar("logged on: " + firebaseAuth.getCurrentUser().getEmail(), Snackbar.LENGTH_SHORT);
Uri img = firebaseAuth.getCurrentUser().getPhotoUrl();
Picasso.with(context).load(img).into(account_image);
account_name.setText(firebaseAuth.getCurrentUser().getDisplayName());
}
}
};
答案 3 :(得分:0)
检查此代码。它不会运行,但如果您了解Firebase,您将很容易理解它。 FriendlyChat。阅读评论。或者只是下载完整的代码,获取json文件并自行测试。