Замена фрагмента из внутренней части базы данных addOnCompleteListener - PullRequest
0 голосов
/ 01 декабря 2018

Я попытался заменить фрагмент изнутри firebaseAuth.signInWithEmailAndPassword (электронная почта, пароль) .addOnCompleteListener.

Но мое приложение падает.Пожалуйста, разрешите.Вот код: FragmentManager fm;

внутри при создании представления: fm = getActivity (). GetSupportFragmentManager ();

Функция userLogin вызывается из onClickListener кнопки входа в систему:

private void userLogin()
{
    String email = login_email.getText().toString().trim();
    String password = login_password.getText().toString().trim();

    if (TextUtils.isEmpty(email)) { //email is empty
        return;

    }
    if (TextUtils.isEmpty(password)) { //password empty
        return;
    }
    login_progress.setMessage("Signing in...");
    login_progress.show();

    firebaseAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>(){
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {

            if(task.isSuccessful())
            {
                login_progress.dismiss();

                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.root, new home());
                ft.commit();

            }
            else{
                login_progress.dismiss();
                Toast.makeText(getContext(),"User ID or Password incorrect!",Toast.LENGTH_LONG).show();

            }
        }
    });

}

Простое выражение Toast работает при нажатии Вход.Нет проблем в аутентификации.Проблема с заменой фрагмента.

1 Ответ

0 голосов
/ 01 декабря 2018

signInWithEmailAndPassword "Асинхронный вход в систему с использованием электронной почты и пароля."

Необходимо убедиться, что все изменения в пользовательском интерфейсе выполняются в потоке пользовательского интерфейса.

firebaseAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>(){
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {

        final Activity activity = getActivity();
        if (activity != null) activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(task.isSuccessful()) {
                    login_progress.dismiss();

                    FragmentTransaction ft = fm.beginTransaction();
                    ft.replace(R.id.root, new home());
                    ft.commit();

                } else {
                    login_progress.dismiss();
                    Toast.makeText(getContext(),"User ID or Password incorrect!",Toast.LENGTH_LONG).show();
                }
            }
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...