База данных firebase запрашивает и возвращает значение true, но все равно продвигается, если пользователь существует, и регистрирует повторяющуюся запись - PullRequest
1 голос
/ 14 марта 2019

Возвращает информацию о том, существует ли пользователь или нет, только если электронная почта уже зарегистрирована, если я использую другую электронную почту, процесс все еще продолжается, я думаю, что я не использую возвращаемое значение правильно.

Это остается, только если электронная почта зарегистрирована.Если бы я использовал другое письмо, это не остановило бы процесс.

This stays only if the email is registered, if I used a different email, it won't stop the process

private void checkUsername() {
    final String Username = editTextUsername.getText().toString().trim();
    //Check early for the username length
    if (!TextUtils.isEmpty(Username)) {
        DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").getRef();
        final Query UsernameReference = mDatabaseReference.orderByChild("Username").equalTo(Username);
        ValueEventListener UsernameValueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String usernameExist = dataSnapshot.getValue(String.class);

                //If the username not null
                if (usernameExist != null) {
                    //If username exist
                    if (usernameExist.equals(Username)) {
                        editTextUsername.setError("username taken");
                        editTextUsername.requestFocus();
                    } else {
                        //If not exist, proceed here, which mean success

                        //Change to your edit text
                        String email = null;
                        String password = null;
                        createAcc(email, password, Username);
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        };
        UsernameReference.addListenerForSingleValueEvent(UsernameValueEventListener);
    } else {
        editTextUsername.setError("Username too short");
        editTextUsername.requestFocus();
    }

    final String email = (editTextEmail).getText().toString().trim();
    final String password = editTextPassword.getText().toString().trim();
    //validate email

    if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        editTextEmail.setError("please enter a valid email address");
        return;
    }

    if (TextUtils.isEmpty(Username)) {
        editTextUsername.setError("username required");
        return;
    }

    if (!PASSWORD_PATTERN.matcher(password).matches()) {
        editTextPassword.setError("password must contain an uppercase, a special character, and numbers");
        return;
    }

    if (TextUtils.isEmpty(password)) {
        editTextPassword.setError("password required");
        return;
    }

    if (TextUtils.isEmpty(email)) {
        editTextEmail.setError("email required");
        return;
    }
    if (Username.length() < 5) {
        editTextUsername.setError("Username too short");
    }
}

private void createAcc(final String email, String password, final String Username) {
    progressDialog.setMessage("Registering...");
    progressDialog.show();
    //creating a new user
    mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    //checking if success
                    if (task.isSuccessful()) {
                        //Uid
                        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
                        User user = new User(
                                Username,
                                email);
                        FirebaseDatabase.getInstance().getReference("Users")
                                .child(uid).setValue(user);
                        finish();
                        startActivity(new Intent(SignUpActivity.this, AgeDetailsActivity.class));
                    } else {
                        //display some message here
                        editTextEmail.setError("Email already exists");
                    }
                    progressDialog.dismiss();
                }
            });
}


@Override
public void onClick(View view) {
    if (view == buttonSignup) {
        checkUsername();
    }

1 Ответ

0 голосов
/ 14 марта 2019

Я бы хотел, чтобы вы предпочли что-то подобное, попробуйте это.

 private void checkUsername(final String Username) {
        //Check early for the username length
        if (!TextUtils.isEmpty(Username) && Username.length() < 5) {
            DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users");
            final Query UsernameReference = mDatabaseReference.orderByChild("Username").equalTo(Username);
              UsernameReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String usernameExist = dataSnapshot.child("Username").getValue(String.class);

                //If the username not null
                if (usernameExist != null) {
                    //If username exist
                    if (usernameExist.equals(Username)) {
                        editTextUsername.setError("username taken");
                        editTextUsername.requestFocus();
                    } else {
                        //If not exist, proceed here, which mean success

                        //Change to your edit text
                        String email = null;
                        String password = null;
                        createAcc(email, password, Username);
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    } else {
        editTextUsername.setError("Username too short");
        editTextSekolah.requestFocus();
    }
}

private void createAcc(final String email, String password, final String Username) {
    progressDialog.setMessage("Registering...");
    progressDialog.show();
    //creating a new user
    mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    //checking if success
                    if (task.isSuccessful()) {

                        //Uid
                        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

                        User user = new User(
                                Username,
                                email);
                        FirebaseDatabase.getInstance().getReference("Users")
                                .child(uid).setValue(user);
                        finish();
                        startActivity(new Intent(SignUpActivity.this, AgeDetailsActivity.class));

                    } else {
                        //display some message here
                        editTextEmail.setError("Email already exists");
                    }
                    progressDialog.dismiss();
                }
            });
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...