Android Firebase Authentication воссоздает активность навсегда - PullRequest
0 голосов
/ 04 мая 2019

Я использую Firebase для регистрации своих пользователей и требую аутентификации для перехода на домашний экран с использованием метода signInWithEmailAndPassword() и Intent.

Аутентификация работает нормально, она успешно входит в систему для моих пользователей, НО проблема в том, что когда аутентификация прошла успешно и HomeActivity запускается, действие продолжает бесконечно воссоздавать и экран остается черным.

Я пробовал много способов сделать Intent, чтобы перейти от MainActivity к HomeActivity после входа в систему, но этот бесконечный цикл продолжает происходить. Странно то, что если закрыть приложение, пока экран черный, «Force Stop», а затем снова открыть приложение, приложение сразу перейдет к HomeActivity. HomeActivity содержит FrameLayout с Fragment.

У меня есть правильная реализация Gradle для Firebase.

Вот как MainActivity.java и OnStart() и attemptLogin() выглядят так:

    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();
        }
    }

В Logcat эти строки кода повторяются вечно (некоторые из них я использую как журналы отладки, как будто один из Домов был создан и Фрагмент)

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 в HomeActivity без его воссоздания навсегда

1 Ответ

0 голосов
/ 04 мая 2019

Это отлично работает, оно будет автоматически перенаправлено на HomeActivity после успешного входа в систему.Если вы уже авторизовались, при запуске приложения начнется 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();

    }



}
...