Похоже, что в вашем классе Register в функции checkUserProfile () вы проверяете, имеет ли userId из firebaseUser.getUid () значение NULL. На данный момент это всегда будет не нулевым, потому что вы уже утверждаете, что пользователь должен быть аутентифицирован на этом этапе.
Судя по вашему коду, это просто ошибка с вашей стороны. Я предполагаю, что то, что вы пытаетесь сделать, это посмотреть, есть ли детали в базе данных FirebaseDatabase. У вас есть ссылка на базу данных, которую вы не используете.
private void checkUserProfile() {
FirebaseUser firebaseUser = auth.getCurrentUser();
assert firebaseUser != null;
String userid = firebaseUser.getUid();
//Unused reference
reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
if (userid != null) {
Intent intent = new Intent(Register.this, MainActivity.class);
startActivity(intent);
}
Но также мой вопрос был бы: вы уверены, что хотите использовать базу данных в реальном времени для информации о пользователе? Вы сохраняете детали в функции Details, используя FirebaseFirestore. Разве вы не хотите проверить, существуют ли детали в FirebaseFirestore?
Как исправить:
Сначала давайте создадим класс пользовательских данных:
public class User {
public String uid;
public String firstName;
public String lastName;
public String email;
public User {
// Default constructor required for calls to DataSnapshot.getValue(User.class)
}
public User(String uid, String firstName, String lastName, String email) {
this.uid = uid;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
}
Теперь давайте изменим код в Details. java класс для использования Класс пользователя:
private void register(String first_name, String last_name, String eMail) {
FirebaseUser firebaseUser = auth.getCurrentUser();
assert firebaseUser != null;
String userid = firebaseUser.getUid();
reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
User user = new User(userid, firstName, lastName, eMail)
reference.setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Intent intent=new Intent(Details.this,MainActivity.class);
startActivity(intent);
}
else{
Toast.makeText(Details.this,"Registration failed...",Toast.LENGTH_SHORT).show();
}
}
});
}
Давайте проверим, существуют ли регистрационные данные в базе данных в методе checkUserProfile ():
private void checkUserProfile() {
FirebaseUser firebaseUser = auth.getCurrentUser();
assert firebaseUser != null;
String userid = firebaseUser.getUid();
reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Intent intent = new Intent(Register.this, MainActivity.class);
startActivity(intent);
}
else {
Toast.makeText(Register.this, "Profile doesnt exist", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Register.this, Details.class);
startActivity(intent);
}
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
Дайте мне знать, если это работает для вас.