private boolean validateRepeatPassword() {
String repeatPasswordInput = uRepeatPassword.getText().toString().trim();
String passwordInput = uPassword.getText().toString().trim();
if (repeatPasswordInput.isEmpty()) {
uRepeatPasswordError.setError("Field can't be empty");
return true;
} else if (repeatPasswordInput.equals(passwordInput)) {
uRepeatPasswordError.setError("Repeated password must be equalse to the first ");
return true;
} else {
uRepeatPasswordError.setError(null);
return false;
}
}
Давайте посмотрим на этот метод, поскольку именно здесь у вас есть проблемы.
Во-первых, ваш getText () немного странный.
String repeatPasswordInput = uRepeatPassword.getText().toString().trim();
String passwordInput = uPassword.getText().toString().trim();
getText ( ) скорее всего уже возвращает String. Для этого нет особых причин вызывать toString ().
String repeatPasswordInput = uRepeatPassword.getText().trim();
String passwordInput = uPassword.getText().trim();
должен делать.
Во-вторых, ваша бизнес-логика c отключена при второй проверке.
if (repeatPasswordInput.equals(passwordInput)) {
uRepeatPasswordError.setError("Repeated password must be equalse to the first ");
return true;
}
Ваш метод ошибок говорит, что входные данные должны быть идентичны, но вы даете эту ошибку только тогда, когда они фактически идентичны. Скорее всего, вы имели в виду это:
if (!repeatPasswordInput.equals(passwordInput)) {
uRepeatPasswordError.setError("Repeated password must be equalse to the first ");
return true;
}
Теперь, чтобы показать все ошибки. То, что вы делаете, немного так:
private boolean isValid() {
if ( aIsInvalid()) {
errorField.setText("A is invalid");
return true;
} else if ( bIsInvalid() ) {
errorField.setText("B is invalid");
return true;
}
return false;
}
Если я правильно понимаю ваш вопрос, то и a, и b могут быть недействительными, и если это так, вы хотите показать оба сообщения. Во-первых: удалите возвращенные истинные утверждения. В тот момент, когда вы нажмете одну из них, ваша проверка закончится. Итак, сделайте что-то вроде этого:
private boolean isValid() {
boolean returnVal = false;
if ( aIsInvalid()) {
errorField.setText("A is invalid");
returnVal = true;
} else if ( bIsInvalid() ) {
errorField.setText("B is invalid");
returnVal = true;
}
return returnVal;
}
Теперь весь блок будет работать, потому что вы возвращаете значение только в последней строке. Это не будет работать так, как вы этого хотите (пока), так как ваш оператор else гарантирует, что если a неверно, вы не проверяете на b. Измените код на это:
private boolean isValid() {
boolean returnVal = false;
if ( aIsInvalid()) {
errorField.setText("A is invalid");
returnVal = true;
}
if ( bIsInvalid() ) {
errorField.setText("B is invalid");
returnVal = true;
}
return returnVal;
}
Теперь он проверит их обоих. Тем не менее, это не очень хорошо, так как, если оба недействительны, ваше второе сообщение об ошибке перезапишет ваше первое.
Итак:
private boolean isValid() {
boolean returnVal = false;
String msg = "";
if ( aIsInvalid()) {
returnVal = true;
msg = "A is invalid";
}
if ( bIsInvalid() ) {
if ( returnVal ) a += "/n";
msg += "B is invalid";
returnVal = true;
}
if ( returnVal ) {
errorField.setText(msg);
}
return returnVal;
}
Таким образом, если ваше поле достаточно большое, оно будет показать оба сообщения. Изменения должны быть не менее 6 символов;