WedX - журнал о программировании и компьютерных науках

Android Firebase создает нового пользователя, который не работает

Я надеюсь, что кто-то может мне помочь. Ниже приведен мой код для создания/регистрации пользователя. Я использую Android Studio и Firebase. По какой-то причине код не создает нового пользователя. Я могу вручную добавлять пользователей в базу данных, однако я не могу создавать новых пользователей, когда запускаю эмулятор и проверяю вход в систему. Программа зависает при запуске progressDialog. Когда я удаляю progressDialog, я не получаю ответа, поэтому кажется, что программа зависает при вызове createUserWithEmailAndPassword(). Я включил аутентификацию по электронной почте и паролю в консоли Firebase. Я не уверен, в чем проблема, и был бы признателен за любые идеи от кого-то более опытного в кодировании. Спасибо всем заранее.

public class RegisterPage extends AppCompatActivity implements View.OnClickListener{

//declaration of views (variables)
private Button btn_signup;
private EditText txt_firstname;
private EditText txt_lastname;
private EditText txt_email_signup;
private EditText txt_username;
private EditText txt_password_signup;
private EditText txt_passwordConfirm;

private ProgressDialog progressDialog;
private FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthStateListener;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register_page);

    //initialization of view (assign id's)
    progressDialog = new ProgressDialog(this);
    btn_signup = (Button) findViewById(R.id.btn_signup);
    txt_firstname = (EditText) findViewById(R.id.txt_firstname);
    txt_lastname = (EditText) findViewById(R.id.txt_lastname);
    txt_email_signup = (EditText) findViewById(R.id.txt_email_signup);
    txt_username = (EditText) findViewById(R.id.txt_username);
    txt_password_signup = (EditText) findViewById(R.id.txt_password_signup);
    txt_passwordConfirm = (EditText)findViewById(R.id.txt_passwordConfirm);

    //assign database instances
    mAuth = FirebaseAuth.getInstance();
    mAuthStateListener = new FirebaseAuth.AuthStateListener(){
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if(user != null) {
            }
            else{
                startActivity(new Intent(RegisterPage.this, UserMainPage.class));
            }
        }
    };


    //set the listener for the click event
    btn_signup.setOnClickListener(this);

}

//function to register user
private void registerUser(){
    //get user input
    String email = txt_email_signup.getText().toString().trim();
    String password = txt_password_signup.getText().toString().trim();
    String confirm = txt_passwordConfirm.getText().toString().trim();
    String firstname = txt_firstname.getText().toString().trim();
    String lastname = txt_lastname.getText().toString().trim();
    String username = txt_username.getText().toString().trim();

        //check if stings are empty using TextUtils
        if(TextUtils.isEmpty(firstname)){ //email is empty
            Toast.makeText(this, "Please enter firstname", Toast.LENGTH_SHORT).show();
            //stop further execution
            return;

        }
        if(TextUtils.isEmpty(lastname)){ //email is empty
            Toast.makeText(this, "Please enter lastname", Toast.LENGTH_SHORT).show();
            //stop further execution
            return;

        }
        if(TextUtils.isEmpty(username)){ //email is empty
            Toast.makeText(this, "Please enter a username", Toast.LENGTH_SHORT).show();
            //stop further execution
            return;

        }
        if(TextUtils.isEmpty(email)){ //email is empty
            Toast.makeText(this, "Please enter email", Toast.LENGTH_SHORT).show();
            //stop further execution
            return;

        }
        if(TextUtils.isEmpty(password)){ //password is empty
            Toast.makeText(this, "Please enter password", Toast.LENGTH_SHORT).show();
            //stop further execution
            return;
        }
        if(!password.equals(confirm)){
            Toast.makeText(this, "Your passwords do not match", Toast.LENGTH_SHORT).show();
            //stop further execution
            return;
        }


            //if validations are okay
            //we will show a progressDialog as we create user account
            progressDialog.setMessage("Creating account...");
            progressDialog.show();



    //register user in firebase database
    mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {

                            @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                           progressDialog.dismiss();
                                if (task.isSuccessful()){
                                // user registered, start profile activity
                                Toast.makeText(RegisterPage.this,"Account Created",Toast.LENGTH_LONG).show();

                                finish();
                                startActivity(new Intent(getApplicationContext(), UserMainPage.class));
                            }
                            else{
                                Toast.makeText(RegisterPage.this,"Could not create account. Please try again",Toast.LENGTH_SHORT).show();
                            }
                        }
                    });

}


@Override
public void onClick(View view){
    if(view == btn_signup){
        //if signup button clicked call function register user
        registerUser();
    }
}


/* @Override
   protected void onStart(){
    super.onStart();
    mAuth.addAuthStateListener(mAuthStateListener);
  }

 @Override
 protected void onStop(){
    super.onStop();
    mAuth.removeAuthStateListener(mAuthStateListener);
 }*/
}

Ответы:


1

Это происходит потому, что вы вообще не создаете пользователя. Итак, в вашем методе onComplete вам нужно получить Firebase текущего пользователя. Итак, if (task.isSuccessful() создайте пользователя следующим образом:

mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
       progressDialog.dismiss();
        if (task.isSuccessful()){
        FirebaseUser user = mAuth.getCurrentUser(); //You Firebase user
        // user registered, start profile activity
        Toast.makeText(RegisterPage.this,"Account Created",Toast.LENGTH_LONG).show();

        finish();
        startActivity(new Intent(getApplicationContext(), UserMainPage.class));
        }
        else{
        Toast.makeText(RegisterPage.this,"Could not create account. Please try again",Toast.LENGTH_SHORT).show();
        }
    }
    }); 

Надеюсь, поможет.

02.05.2017
  • Большое спасибо. Это было исправлением того, что код был необходим. Теперь это работает. 02.05.2017
  • Рад слышать это и рад помочь. Ваше здоровье! 02.05.2017
  • И, пожалуйста, подумайте о том, чтобы поставить +1. Спасибо! 02.05.2017
  • Я бы с удовольствием, но я не уверен, как это сделать. Я нажал на стрелку вверх сбоку, однако число не изменилось. Я также нажал на галочку, чтобы она стала зеленой. 02.05.2017
  • Я видел, что у тебя репутация 2 и это разрешено на ›15. Нп. Ваше здоровье! 02.05.2017
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]