如何在firebase for android中使用身份验证UId从用户节点获取用户信息?
我使用firebase电子邮件/密码身份验证进行登录。我使用一个用户节点来存储用户数据。我可以使用共享首选项将身份验证Uid传递给不同的活动。如何使用此UId获取用户信息,如姓名、电话等 注意:用户信息存储在用户节点中,UId来自身份验证 我尝试了以下方法,但UName、UMobile和UEmail显示空值。我可以正确地获取UId如何在firebase for android中使用身份验证UId从用户节点获取用户信息?,android,firebase,firebase-realtime-database,sharedpreferences,Android,Firebase,Firebase Realtime Database,Sharedpreferences,我使用firebase电子邮件/密码身份验证进行登录。我使用一个用户节点来存储用户数据。我可以使用共享首选项将身份验证Uid传递给不同的活动。如何使用此UId获取用户信息,如姓名、电话等 注意:用户信息存储在用户节点中,UId来自身份验证 我尝试了以下方法,但UName、UMobile和UEmail显示空值。我可以正确地获取UId FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser() ; String U
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser() ;
String UId = currentUser.getUid();
String UName = currentUser.getDisplayName();
String UMobile = currentUser.getPhoneNumber();
String UEmail = currentUser.getEmail();
存储用户数据时,请将其与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());
// ...
}
});
请看一下本指南,注意FirebaseAuth.AuthStateListener() 如果使用UID和其他自定义字段将用户存储在节点中,则使用FirebaseAuth无法获取这些字段。 您需要使用此UID查询包含用户的树,并解析用户数据快照。
使用FirebaseAuth只能检索UID。重写AuthStateChanged侦听器:
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());
}
}
};
检查此代码。它不会运行,但如果您了解Firebase,您将很容易理解它。阅读评论。或者下载完整的代码,获取json文件并自己测试。您是否在AuthStateChanged上实现了
侦听器?我需要在哪里实现?您是否实现了实现了任何内容?我刚刚在auth.signInWithEmailAndPassword(电子邮件,密码)中使用了上述代码您可以发布那个code
?这里我也使用UId作为数据库中用户的唯一id。现在我想获取用户的详细信息,如姓名、电话等,并将其存储为全局共享首选项。如果是,如何查询相同的信息?