Моя аутентификация Firebase основана на электронной почте (для входа в систему и регистрации требуется только адрес электронной почты и пароль), которой впоследствии управляет firebase.
My RegistrationActivity также запрашивает адрес электронной почты, пароль и имя, потому что я хочу позже использовать его в своей AccountActivity, чтобы иметь что-то вроде «Hello, [Name]» после входа в систему. Для этогоимя сохранено, к счастью, FirebaseUser уже имеет поле с именем DisplayName, поэтому все, что мне нужно сделать, это обновить пользователя, как только он будет создан (createUserWithEmailAndPassword (...) автоматически выполняет также «вход в систему»)
Код, связанный с RegisterActivity:
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Toast.makeText(RegisterActivity.this, "Could not complete registration", Toast.LENGTH_SHORT).show();
} else {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(name).build();
user.updateProfile(profileUpdates);
Toast.makeText(RegisterActivity.this, "Update complete", Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegisterActivity.this, AccountActivity.class));
finish();
}
}
});
Однако, как только запускается AccountActivity, TextView, который должен содержать FirebaseUser DisplayName, становится пустым.И только ПОСЛЕ нажатия, он снова открывает ту же учетную запись (почему?), И TextView обновляется с помощью DisplayName.Но функциональность «назад» должна просто полностью закрыть приложение.Что я пропускаю или делаю неправильно?
Код AccountActivity:
public class AccountActivity extends AppCompatActivity {
private Button signOutBtn;
private FirebaseAuth firebaseAuth;
private FirebaseUser user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
signOutBtn = (Button) findViewById(R.id.signOutBtn);
signOutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
firebaseAuth.signOut();
startActivity(new Intent(AccountActivity.this, LoginActivity.class));
finish();
}
});
TextView accountTextView = (TextView) findViewById(R.id.AccountTextView);
//TODO: if user.getDisplayName == null, get the NAME choice from input in RegisterActivity
if (user.getDisplayName() == null)
{
accountTextView.setText("xxx");
} else {
accountTextView.setText(user.getDisplayName());
}
}
@Override
public void onBackPressed() {
finish();
}
}
Я предполагал, что при входе в систему обновление текущего зарегистрированного пользователя не изменит его до повторного запуска действия., но я сомневаюсь, что это так, поскольку простое нажатие назад, когда на AccountActivty сначала откроет его снова, с соответствующим DisplayName, затем повторное нажатие вернет его, чтобы правильно закрыть.
Почему сначала нажатие не закрывает его назад, но вместо этого он обновляет TextView для правильного DisplayName?Почему он не обновляется должным образом с первого раза?Извините, если я не разместил всю необходимую информацию, пожалуйста, дайте мне знать.