Я пытаюсь получить данные профиля текущего пользователя, вошедшего в систему, из базы данных Firebase Realtime. Я аутентифицировал своих пользователей, используя электронную почту и пароль. Затем я сохранил данные регистрации в базе данных в виде объекта следующим образом: (Весь этот код включен в OnCreate в SignUpActivity). Я сохранил данные как Пользователь объекты. Мой пользовательский класс модели имеет методы получения и установки, параметризованные и пустые конструкторы.
´´´´// 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 аутентифицированных пользователей. Моя структура базы данных выглядит следующим образом, и по умолчанию применяются правила публикации c.
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();
Тогда onStart;
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 аутентифицированных пользователей. Пожалуйста, помогите, я действительно не понимаю, что я делаю неправильно.
Заранее спасибо.