2017-10-11 59 views
0

登錄後,我想獲取登錄用戶的用戶信息。在Android版Firebase中登錄後獲取用戶信息

我不知道該怎麼做。

這裏是我的代碼:

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

您正在嘗試使用身份驗證狀態的應用程序甚至已經初始化之前,通過將其進入類定義。在異步調用驗證授權憑證完成之前很久就會調用它。

如指南here所述,「由於auth對象尚未完成初始化,因此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); 
} 

另一種方法是用於存儲用戶數據AUTH完成後:

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... 
        } 
        // ... 
       } 
      }); 
} 

的另一種方法是監視AUTH狀態:

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(); 
     } 
     } 
    }; 
} 
相關問題