Firebase Auth не работает в асинхронной задаче

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

 public void createAccount(String email, String password) {
    mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful());
                    // If sign in fails, display a message to the user. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.

                    if (!task.isSuccessful()) {
                        Toast.makeText(registerActivity.this, "bad",
                                Toast.LENGTH_SHORT).show();
                        sr = false;

                    } else {

                        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                        if (user != null) {

                            EditText etname = (EditText) findViewById(R.id.etName);
                            EditText etlname = (EditText) findViewById(R.id.etLName);
                            String namez = etname.getText().toString();
                            String lnamez = etlname.getText().toString();
                            DatabaseReference mDatabase;
                            mDatabase = FirebaseDatabase.getInstance().getReference();
                            Toast.makeText(registerActivity.this, "good", Toast.LENGTH_SHORT).show();
                            String UID = user.getUid();
                            mDatabase.child("users").child(UID + "_lname").setValue(lnamez);
                            mDatabase.child("users").child(UID + "_name").setValue(namez);
                            sr = true;
                        }
                    }

                    // ...
                }
            });
}

и вот AsyncTask :

 private class createInBack extends AsyncTask<Void, Void, Void> {
//Executes the 'createAccount' method in background .
EditText etemail = (EditText) findViewById(R.id.etEmail);
    EditText etpassword = (EditText) findViewById(R.id.etPassword);
    String email = etemail.getText().toString();
    String password = etpassword.getText().toString();
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        spinner.setVisibility(View.VISIBLE);

    }
    @Override
    protected Void doInBackground(Void... voids) {

        createAccount(email, password);
        return null;
    }
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        if(sr){
            Toast.makeText(registerActivity.this, "we good here", Toast.LENGTH_SHORT).show();
            startActivity(new Intent(registerActivity.this, MainActivity.class));
        }
        spinner.setVisibility(View.GONE);
    }
}

так в чем же проблема ?

2 ответа

  1. Проблема Решена ,
    Я нашел в XML-макете, что я забыл удалить «android: onClick» от кнопки.

  2. Linxy прав, нет необходимости делать Asynctask для вашей цели.
    Firebase решает это за вас, посмотрите на простой пример.

    private void loginAccount(String email, String password) {
            final ProgressDialog progressDialog = new ProgressDialog(Login.this,
                    R.style.AppTheme_Dark_Dialog);
            progressDialog.setIndeterminate(false);
            progressDialog.setMessage("Autenticando...");
            progressDialog.show();
            mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    login.setEnabled(true);//button-ignore
                    login.setAlpha(1f);
                    if (task.isSuccessful()){
                        progressDialog.dismiss();
                        Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                        startActivity(intent);
                        finish();
                        //Toast.makeText(Login.this,"Sesion iniciada",Toast.LENGTH_SHORT).show();
                    }else{
                        progressDialog.dismiss();
                        Toast.makeText(Login.this,"Email or password invalidate",Toast.LENGTH_SHORT).show();
                        Log.i("sesion","MaldatosH2");
                    }
                }
            });
        }
    

    Для создания пользователя используется тот же xd