我正在使用Firebase来注册我的用户,并要求进行身份验证以实施signInWithEmailAndPassword()
方法和Intent
的主屏幕。
身份验证工作正常,它成功登录了我的用户,但是,问题是,当身份验证成功并且HomeActivity
启动时,活动会无限地重新创建,并且屏幕保持黑屏。
登录后,我尝试了多种方法将Intent
从MainActivity
移到HomeActivity
,但是无限循环不断发生。
奇怪的是,如果在屏幕为黑色时关闭应用程序,“强制停止”,然后再次打开应用程序,则应用程序将直接进入HomeActivity
,而不会出现问题。 HomeActivity
包含一个FrameLayout
和一个Fragment
。
我确实有适用于Firebase的正确Gradle实现。
这是MainActivity.java
的{{1}}和OnStart()
的样子:
attemptLogin()
在Logcat中,这些代码行将永远重复(其中一些我将它们用作调试日志,例如已创建一个Home和Fragment)
private void attemptLogin() {
String email = Objects.requireNonNull(mEditTextUsername.getText()).toString().trim();
String password = Objects.requireNonNull(mEditTextPassword.getText()).toString().trim();
if (email.isEmpty() || password.isEmpty()) {
mInputLayoutUsername.setError(getString(R.string.error_emptySpace));
mInputLayoutPassword.setError(getString(R.string.error_emptySpace));
return;
}
mProgressBar.setVisibility(View.VISIBLE);
mEnterButton.setVisibility(View.INVISIBLE);
// Use Auth to sign in with email & password
mAuth.signInWithEmailAndPassword(email, password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
startActivity(new Intent(MainActivity.this, HomeActivity.class));
finish();
}
});
}
@Override
protected void onStart() {
super.onStart();
mUser = mAuth.getCurrentUser();
if (mUser != null) {
Log.d(TAG, "onCreate: Going home because mUser is not null");
startActivity(new Intent(MainActivity.this, HomeActivity.class));
finish();
}
}
在D/HomeActivity: onCreate: Home has been created
D/HomeActivity: onCreate: Fragment placed correctly
V/FA: Activity resumed, time: 25049213
V/FA: Screen exposed for less than 1000 ms. Event not sent. time: 9
V/FA: Activity paused, time: 25049222
V/FA: onActivityCreated
内部,我根本不使用HomeActivity
。
感谢您的回答。希望您能帮助我,使该应用程序直接从recreate()
进入MainActivity
,而无需永远重新创建
答案 0 :(得分:0)
这很好用,成功登录后,它将自动重定向到HomeActivity。如果已经登录,则将在App Start HomeActivity上启动。
private void signIn(String mail, String password) {
mAuth.signInWithEmailAndPassword(mail,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
updateUI();
}
else {
showMessage(task.getException().getMessage());
}
}
});
}
private void updateUI() {
startActivity(HomeActivity);
finish();
}
private void showMessage(String text) {
Toast.makeText(getApplicationContext(),text,Toast.LENGTH_LONG).show();
}
@Override
protected void onStart() {
super.onStart();
FirebaseUser user = mAuth.getCurrentUser();
if(user != null) {
//user is already connected so we need to redirect him to home page
updateUI();
}
}