Почему MainActivity появляется перед отображением FirebaseUI

#java #firebase #android-activity #firebase-authentication #firebaseui

#java #firebase #android-активность #firebase-аутентификация #firebaseui

Вопрос:

Я создал небольшое приложение для чата с использованием firebase. Я также реализовал firebaseui для входа в систему. Проблема, с которой я сталкиваюсь, заключается в том, что пользователь не зарегистрировался. Всякий раз, когда приложение запускается, оно должно приводить меня непосредственно к параметрам регистрации FirebaseUI, но то, что происходит с текущим кодом, на миллисекунду показывает макет main activity, а затем переходит к FirebaseUI.

Также, когда я нажимаю кнопку «Назад» перед выходом, она снова показывает мне макет основного действия. Я хочу, чтобы действие было уничтожено и доставило меня домой (Android), но оно показывает мне основную активность в течение миллисекунды, а затем приложение завершает работу.

Почему это происходит?

 public class MainActivity extends AppCompatActivity {

    private static final int RC_SIGN_IN = 1;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener;
    private TextView mUserNameTextView;
    private Button mSignOutButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mUserNameTextView = (TextView) findViewById(R.id.user_name_text_view);
        mSignOutButton = (Button) findViewById(R.id.sign_out_button);

        mAuth = FirebaseAuth.getInstance();


        FirebaseUser user = mAuth.getCurrentUser();


        mAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in
                    mUserNameTextView.setText(user.getDisplayName());

                } else {
                    // User is signed out
                    startActivityForResult(
                            AuthUI.getInstance()
                                    .createSignInIntentBuilder()
                                    .setAvailableProviders(Arrays.asList(
                                            new AuthUI.IdpConfig.EmailBuilder().build(),
                                            new AuthUI.IdpConfig.GoogleBuilder().build()))
                                    .build(),
                            RC_SIGN_IN);
                }
            }
        };


        mSignOutButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signOut();
            }
        });
    }

    private void signOut() {
        FirebaseAuth.getInstance().signOut();
        mUserNameTextView.setText("");
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            if (resultCode == RESULT_OK) {
                // Sign-in succeeded, set up the UI
                Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
            } else if (resultCode == RESULT_CANCELED) {
                // Sign in was canceled by the user, finish the activity
                Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mAuthStateListener != null) {

            // when app is paused remove the state listener
            mAuth.removeAuthStateListener(mAuthStateListener);

        }


    }

    @Override
    protected void onResume() {
        super.onResume();

        // adding the state listener
        mAuth.addAuthStateListener(mAuthStateListener);
    }
}
  

Комментарии:

1. вы завершаете действие FirebaseUI?

2. спасибо, что нашли время, чтобы посмотреть на это. У меня есть только main activity (и я не создавал java-файл login activity)

Ответ №1:

Я полагаю, что вы не сможете сделать так, чтобы основное действие не отображалось в течение миллисекунды при запуске приложения, поскольку вы сначала открываете основное действие, а затем перенаправляете его (если я правильно понял).

Однако я могу помочь вам с вашей проблемой, когда вы нажимаете кнопку «Назад».

Добавьте это в свой код FirebaseUI как обычный метод:

 @Override
public void onBackPressed() {
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class); 
//replace "CurrentActivity" and "NextActivity" with your activity names
    startActivity(intent);
}
  

При нажатии кнопки «Назад» откроется нужное действие.

Комментарии:

1. Спасибо, но у меня есть только одно действие (основное действие) внутри него, я написал код для пользовательского интерфейса firebase (я слышал, что у FirebaseUI есть своя активность), так что да, почему основное действие отображается, даже когда пользователь не вошел в систему, оно должно напрямую показывать мне параметры регистрации firebaseui

Ответ №2:

Когда вы начинаете новое действие после входа в систему с помощью FirebaseUI, вам нужно завершить (удалит действие из backstack) действие входа в систему при запуске activity.

 Intent intent = new Intent(ActivityA.this, NextActivity.class); 
    startActivity(intent);
    finish();
  

Комментарии:

1.Спасибо, но у меня есть только одно действие (основное действие) внутри него, я написал код для пользовательского интерфейса firebase (я слышал, что у FirebaseUI есть своя активность), так что да, почему основное действие отображается, даже когда пользователь не вошел в систему, оно должно напрямую показывать мне параметры регистрации firebaseui