Я думаю, что вы должны отлаживать свой код с помощью Android Studio Debugger.Это очень мощный инструмент, и я думаю, что он поможет вам решить эту проблему.Если вы не можете использовать отладчик, вы можете вставить System.out.println в интересующие строки.
Возможно, я бы сделал это так (но использование отладчика намного лучше):
public boolean checkIfExists(String userEmail){
System.out.println("INPUT: " + userEmail);
db = this.getReadableDatabase();
String query = "select "+ COL_EMAIL + " from " +TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
String existEmail;
if (cursor.moveToFirst()) {
do {
existEmail = cursor.getString(0);
System.out.println("Checking email " + existEmail);
if (existEmail.equals(userEmail)) {
return true;
}
} while (cursor.moveToNext());
}
return false;
}
private boolean validateEmail() {
String emailInput = textInputEmail.getEditText().getText().toString().trim();
System.out.println("Email is " + emailInput);
if (myDb.checkIfExists(emailInput)) {
textInputEmail.setError("Email already exist");
return false;
} else if (emailInput.isEmpty()) {
textInputEmail.setError("Field can't be empty");
return false;
} else if (!Patterns.EMAIL_ADDRESS.matcher(emailInput).matches()) {
textInputEmail.setError("Please enter a valid email address");
return false;
} else {
textInputEmail.setError(null);
return true;
}
}
Также я хочу обратить ваше внимание на следующие моменты (вы можете просто пропустить это, потому что это только мои мысли):
1) В checkIfExists
методе вы выбираете ВСЕ сохраненные электронные письма каждый раз, когда вам нужно проверить толькоодин раз.Я думаю, что было бы лучше, если бы вы написали sql-запрос для выбора только конкретного письма, используя выражение WHERE
.
2) В вашем методе validateEmail
вы проверяете emailInput.isEmpty()
и !Patterns.EMAIL_ADDRESS.matcher(emailInput).matches()
ПОСЛЕ Вы проверяете электронную почту в БД.Но это следует проверять в первую очередь потому, что если электронная почта пуста или недействительна с точки зрения формата, мы не можем проверить ее в БД, потому что это, вероятно, не электронная почта:))