在Android上登录Firebase后获取用户信息

时间:2017-10-11 20:45:37

标签: android firebase firebase-authentication

登录后,我想获取登录用户的用户信息。

我不知道该怎么做。

这是我的代码:

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;
    }

这根本不起作用,有人可以帮助我吗

1 个答案:

答案 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();
         }
      }
  };
}