登录后,我想获取登录用户的用户信息。
我不知道该怎么做。
这是我的代码:
public class Dashboard extends Fragment {
FirebaseAuth mFirebaseAuth = FirebaseAuth.getInstance();
FirebaseUser mFirebaseUser = mFirebaseAuth.getCurrentUser();
private DatabaseReference mDatabase;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_dashboard, container, false);
mDatabase = FirebaseDatabase.getInstance().getReference().child("Chamas").child("Users");
mFirebaseUser.getName();
// User ID
mFirebaseUser.getUid();
// Email-ID
mFirebaseUser.getEmail();
// User-Profile (if available)
mFirebaseUser.getPhone();
return view;
}
这根本不起作用,有人可以帮助我吗
答案 0 :(得分:1)
您尝试在应用程序初始化之前使用身份验证状态,方法是将其放入类定义中。在验证身份验证凭据的异步调用完成之前很久就会调用此方法。
如指南here中所述,“getCurrentUser也可能返回null,因为auth对象尚未完成初始化。”
由于您没有包含有关身份验证工作流程的任何信息,因此很难说出您在这里需要什么。您可能希望在onStart()中获取用户数据,如示例所示:
@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
updateUI(currentUser);
}
另一种方法是在身份验证完成后存储用户数据:
private FirebaseUser user;
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, store user data
user = mAuth.getCurrentUser();
} else {
// Sign in fails...
}
// ...
}
});
}
另一种方法是监控身份验证状态:
FirebaseUser user;
@Override
private void onCreate() {
firebaseAuth = FirebaseAuth.getInstance();
new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser() != null) {
user = firebaseAuth.getCurrentUser();
}
}
};
}