首页 > 解决方案 > 当条件为真时,Android If 语句不会中断

问题描述

在此活动中,我正在为用户创建一个帐户。我正在使用 mobsandgeeks.saripaar API 进行验证功能。为了让活动正常工作,我目前将错误打印到一个不可见的文本字段,如果此文本字段有文本,则活动不会进入下一个活动(即用户输入存在问题)。

我在检查数据库中是否已存在用户名或电子邮件的 if 语句时遇到问题。当条件为真(在日志中检查)时,不会创建帐户,但仍会显示“已创建帐户”消息,并且应用程序仍会转到下一个活动。

对此的任何帮助将不胜感激。谢谢

创建帐户.java

DatabaseHelper myDb;
private static final String TAG = "CreateAccount";
//http://learningprogramming.net/mobile/android/form-validation-in-android/
@NotEmpty
@Length(min = 3, max = 10)
private EditText etUsername;

@NotEmpty
private EditText etUserAddress;

@NotEmpty
private EditText etFirstName;

@NotEmpty
private EditText etLastName;

@NotEmpty
@Email
private EditText etEmail;

@NotEmpty
@Pattern(regex =  "(^\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})$)")
private EditText etPhone;

@NotEmpty
private EditText etPaypal;

//Valid = abcABC123!
@NotEmpty
@Password(scheme = Password.Scheme.ALPHA_NUMERIC_SYMBOLS)
private EditText etPassword;

@ConfirmPassword
EditText etConfirmPassword;
Button btnCreateAccount;

TextView check;

//https://www.youtube.com/watch?v=rt-8PgncIio
ImageView profileImageView;
Button btnProfilePic;
private static final int SELECT_PHOTO = 1;
private static final int CAPTURE_PHOTO = 2;
ProgressDialog progressBar;
int progressBarStatus;
Handler progressBarHandler = new Handler();
Bitmap thumbnail;

private Validator validator;

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

    myDb = new DatabaseHelper(this);

    validator = new Validator(this);
    validator.setValidationListener(this);

    etUsername = findViewById(R.id.etUsername);
    etFirstName = findViewById(R.id.etFirstName);
    etLastName = findViewById(R.id.etLastName);
    etUserAddress = findViewById(R.id.etAddress);
    etEmail = findViewById(R.id.etEmail);
    etPassword = findViewById(R.id.etPasswordLogin);
    etConfirmPassword = findViewById(R.id.etConfirmPasswordLogin);
    etPhone = findViewById(R.id.etPhoneNo);
    etPaypal = findViewById(R.id.etPaypalName);
    btnCreateAccount = findViewById(R.id.btnCreateAccount);
    check = findViewById(R.id.tvCheck);
    btnProfilePic = findViewById(R.id.btnProfilePicture);
    profileImageView = findViewById(R.id.imageProfile);

    btnProfilePic.setOnClickListener(this);

    //(https://www.youtube.com/watch?v=rt-8PgncIio) Image
    //had to change permissions in the Android Manifest file to allow for camera to be used
    if (ContextCompat.checkSelfPermission(CreateAccount.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        profileImageView.setEnabled(false);
        ActivityCompat.requestPermissions(CreateAccount.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
    } else {
        profileImageView.setEnabled(true);
    }
    createAccount();
}

public void createAccount() {

    btnCreateAccount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            validator.validate();
            //(https://www.youtube.com/watch?v=rt-8PgncIio) Image
            profileImageView.setDrawingCacheEnabled(true);
            profileImageView.buildDrawingCache();
            Bitmap bitmap = profileImageView.getDrawingCache();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] data = baos.toByteArray();

            String email1 = etEmail.getText().toString().trim();
            Log.d(TAG, "onClick: email " + email1);
            String username = etUsername.getText().toString().trim();
            Log.d(TAG, "onClick: username " + username);
            boolean emailExists = myDb.checkIfEmailAlreadyExists(email1);
            Log.d(TAG, "onClick: emailExists " + emailExists);
            boolean usernameExists = myDb.checkIfUsernameAlreadyExists(username);
            Log.d(TAG, "onClick: usernameExists " + usernameExists);



            //https://stackoverflow.com/questions/6290531/check-if-edittext-is-empty
             if (etUsername.getText().toString().matches("") | etFirstName.getText().toString().matches("") | etLastName.getText().toString().matches("")
            | etEmail.getText().toString().matches("") | etUserAddress.getText().toString().matches("") | etPassword.getText().toString().matches("")|
                    etConfirmPassword.getText().toString().matches("") | etPhone.getText().toString().matches("") | etPaypal.getText().toString().matches(""))
            {
                Toast.makeText(CreateAccount.this, "Please fill empty fields", Toast.LENGTH_LONG).show();
            }

            else if(check.getText().toString().matches("") == false) {

                Toast.makeText(CreateAccount.this, "Please enter correct details", Toast.LENGTH_SHORT).show();
            }

            else {
                  if (usernameExists){
                     Log.d(TAG, "onClick: userExists " + usernameExists);
                     Toast.makeText(CreateAccount.this, "This username is already registered", Toast.LENGTH_LONG).show();
                     check.setText("TEXT");
                 }
                 else if (emailExists){
                     Log.d(TAG, "onClick: emailExists" + emailExists);
                     Toast.makeText(CreateAccount.this, "This email is already registered", Toast.LENGTH_LONG).show();
                     check.setText("TEXT");
                  }
                 else if (usernameExists == false | emailExists == false) {
                      boolean checktext = check.getText().equals("");

                              // original CRUD video - https://www.youtube.com/watch?v=kDZES1wtKUY&list=PLS1QulWo1RIaRdy16cOzBO5Jr6kEagA07&index=8
                              boolean isInserted = myDb.insertUserData(etUsername.getText().toString(), etUserAddress.getText().toString(), etFirstName.getText().toString(), etLastName.getText().toString(),
                                      etEmail.getText().toString(), etPassword.getText().toString(), etPhone.getText().toString(),
                                      etPaypal.getText().toString(), data);

                              if (isInserted == true) {
                                  if (checktext == true) {
                                      onValidationSucceeded();
                                  }
                                  else if (checktext == false){
                                      Toast.makeText(CreateAccount.this, "Account not Created", Toast.LENGTH_LONG).show();
                                  }
                                  }
                              } else {
                                  Toast.makeText(CreateAccount.this, "Account not Created", Toast.LENGTH_LONG).show();
                              }

                      }

            }

    });
}



//http://learningprogramming.net/mobile/android/form-validation-in-android/
@Override
public void onValidationFailed(List<ValidationError> errors) {
    for (ValidationError error : errors) {
        View view = error.getView();
        //TextView check = findViewById(R.id.tvCheck);
        String message = error.getCollatedErrorMessage(this);
        // Display error messages
        if (view instanceof EditText) {
            ((EditText) view).setError(message);
        } else {
            Toast.makeText(this, message, Toast.LENGTH_LONG).show();
        }
        check.setText(errors.toString());
    }
}

//http://learningprogramming.net/mobile/android/form-validation-in-android/
@Override
public void onValidationSucceeded() {
    Toast.makeText(CreateAccount.this, "Account Created, Please sign in", Toast.LENGTH_LONG).show();
    Intent intent = new Intent(CreateAccount.this, Login.class);
    startActivity(intent);
}

标签: androidif-statement

解决方案


你的情况有问题:

代替:

else if (usernameExists == false | emailExists == false) 

它应该是:

else if (usernameExists == false && emailExists == false) 

这意味着用户/电子邮件不存在,将它们插入数据库并导航到下一个活动。


推荐阅读