[英]How to retrieve user data of authenticated users in Firebase Realtime Database with Android
我正在嘗試從 Firebase 實時數據庫中檢索當前登錄用戶的個人資料數據。 我已經使用電子郵件和密碼對我的用戶進行了身份驗證。 然后我將注冊數據保存在數據庫中,作為一個對象,如下所示:(所有這些代碼都在 SignUpActivity 中 onCreate)。 我將數據保存為用戶對象。 我的User模型類具有 getter 和 setter、參數化和空白構造函數。
´´´´// Initialize FirebaseAuth and DatabaseReference
mFirebaseAuth = FirebaseAuth.getInstance();
mDatabaseRef = FirebaseDatabase.getInstance().getReference("users");
mFirebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//save all data to database
String mUserId = mFirebaseAuth.getCurrentUser().getUid();
User user = new User(email, name,tel, address1,address2,user_type, mUserId);
//add to database
mDatabaseRef.child(mUserId).setValue(user);
//open main activity
Intent intent = new Intent(SignUpActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
因此,mUserId 是經過身份驗證的用戶的 userId。 我的數據庫結構如下,規則默認public。
wish-store-42facaddclose
users
2GbVFSMFrihqVJ8OAXBa56owNW93
address1: "juja"
address2: "Town"
email: "a.bea@gmail.com"
phone: "+237638256239"
userId: "2GbVFSMFrihqVJ8OAXBa56owNW93"
userName: "Beatrice Njambi"
userType: "Buyer Account"
現在,要在 MainActivity 中檢索數據,這是我在 onCreate 中使用的代碼:
//instantiate firebaseAuth
mFirebaseAuth = FirebaseAuth.getInstance();
然后開始;
userName = (TextView) findViewById(R.id.userNameHeader);
//check to see if user is logged in
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
//the user is not logged in, start login activity
loadLogInView();
} else {
String mUserId = mFirebaseUser.getUid();
root = FirebaseDatabase.getInstance().getReference();
DatabaseReference mDatabaseRef = root.child("users").child(mUserId);
ValueEventListener profileListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
userName.setText(user.getUserName());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.i("Read failed", databaseError.getMessage());
}
};
mDatabaseRef.addValueEventListener(profileListener);
}
我曾嘗試調試,它說mUserId存在空指針異常。 因此,問題是正確引用經過身份驗證的用戶的userId 。 請幫忙,我真的不明白我做錯了什么。
提前致謝。
嘗試直接為數據庫對象添加ValueEventListener
,而不是稍后設置。 嘗試檢查您是否已初始化FirebaseAuth
。
mAuth = FirebaseAuth.getInstance();
mAuth.getCurrentUser();
FirebaseUser mUser = mAuth.getCurrentUser();
String uId = mUser.getUid();
String personName=mUser.getDisplayName();
String personEmail=mUser.getEmail();
String personPhoto=mUser.getPhotoUrl();
嘗試這個
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.