Лучшая практика: проверка ввода (Android)
Я новичок в разработке мобильных телефонов Android (для разработки на базе Android Studio - для новых знаний). И здесь я хочу задать вопрос о наилучшей практике для проверки ввода.
Насколько нам известно, разработчик разрабатывает форму ввода. Нам нужно запретить пользователю вводить неправильный ввод в текстовое поле. Итак, вот мой вопрос,
- Можно ли создать только один Java файл только для проверки? Вся форма ввода должна перейти только к одному файлу проверки (в случае большого количества страниц ввода в одном приложении). Если ДА, как я могу получить пример/ссылку/учебник по этой методике для моего изучения. Если НЕТ, почему?
С моей точки зрения лично, у него должен быть способ реализовать технику. Так что нам не нужно было повторно использовать один и тот же код заново для каждого java файла (с точки зрения чистого кода). К сожалению, я не нашел для этого примера или учебника. Возможно, я искал неправильное ключевое слово или неправильно прочитал. И если такой техники нет, какова наилучшая практика для проверки ввода?
Спасибо.
p/s: Этот поток для поиска лучшего способа в лучшей практике. Спасибо.
Ответы
Ответ 1
Этот класс java реализует TextWatcher
, чтобы "смотреть" ваш текст редактирования, наблюдая за любыми изменениями, внесенными в текст:
public abstract class TextValidator implements TextWatcher {
private final TextView textView;
public TextValidator(TextView textView) {
this.textView = textView;
}
public abstract void validate(TextView textView, String text);
@Override
final public void afterTextChanged(Editable s) {
String text = textView.getText().toString();
validate(textView, text);
}
@Override
final public void
beforeTextChanged(CharSequence s, int start, int count, int after) {
/* Needs to be implemented, but we are not using it. */
}
@Override
final public void
onTextChanged(CharSequence s, int start, int before, int count) {
/* Needs to be implemented, but we are not using it. */
}
}
И в вашем EditText
вы можете настроить наблюдателя текста на его прослушиватель
editText.addTextChangedListener(new TextValidator(editText) {
@Override public void validate(TextView textView, String text) {
/* Insert your validation rules here */
}
});
Ответ 2
Один подход (который я использую) заключается в том, что у вас должен быть помощник для проверки входных данных, таких как:
- Ненужность (или пустота)
- Даты
- Пароли
- Письма
- Числовые значения
- и другие
здесь выдержка из моего класса ValidationHelper:
public class InputValidatorHelper {
public boolean isValidEmail(String string){
final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(string);
return matcher.matches();
}
public boolean isValidPassword(String string, boolean allowSpecialChars){
String PATTERN;
if(allowSpecialChars){
//PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";
PATTERN = "^[[email protected]#$%]\\w{5,19}$";
}else{
//PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,20})";
PATTERN = "^[a-zA-Z]\\w{5,19}$";
}
Pattern pattern = Pattern.compile(PATTERN);
Matcher matcher = pattern.matcher(string);
return matcher.matches();
}
public boolean isNullOrEmpty(String string){
return TextUtils.isEmpty(string);
}
public boolean isNumeric(String string){
return TextUtils.isDigitsOnly(string);
}
//Add more validators here if necessary
}
Теперь я использую этот класс:
InputValidatorHelper inputValidatorHelper = new InputValidatorHelper();
StringBuilder errMsg = new StringBuilder("Unable to save. Please fix the following errors and try again.\n");
//Validate and Save
boolean allowSave = true;
if (user.getEmail() == null && !inputValidatorHelper.isValidEmail(user_email)) {
errMsg.append("- Invalid email address.\n");
allowSave = false;
}
if (inputValidatorHelper.isNullOrEmpty(user_first_name)) {
errMsg.append("- First name should not be empty.\n");
allowSave = false;
}
if(allowSave){
//Proceed with your save logic here
}
Вы можете вызвать подтверждение, используя TextWatcher
, который подключен через EditText#addTextChangedListener
Пример:
txtName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//Do nothing
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
validate();
}
});