Android Firebase身份验证永远重新创建活动

时间:2019-05-04 01:25:23

标签: android firebase android-intent firebase-authentication

我正在使用Firebase来注册我的用户,并要求进行身份验证以实施signInWithEmailAndPassword()方法和Intent的主屏幕。

身份验证工作正常,它成功登录了我的用户,但是,问题是,当身份验证成功并且HomeActivity启动时,活动会无限地重新创建,并且屏幕保持黑屏。

登录后,我尝试了多种方法将IntentMainActivity移到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,而无需永远重新创建

1 个答案:

答案 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();

    }



}