Регистрация пользователя, ограничение по количеству символов
Как ограничить вводимое слово в количестве символов, я сделал регистрацию пользователя но возникла проблема, я могу ничего не вводить и пользователь будет зарегистрирован, для того чтобы такого не было нужно сделать чтобы регистрация происходила только когда введут минимум 5 символов и не больше 15 символов а иначе Toast выводило сообщение "Нужно ввести минимум 5 и максимум 15 символов" и не отправляло данные в БД. Как это сделать?
RgisterActivity.java
public class RgisterActivity extends AppCompatActivity {
private ActivityRgisterBinding rgisterBinding;
public EditText regist_name, regist_surname, regist_patronymic, regist_email, regist_phone, regist_password, regist_repassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_rgister);
rgisterBinding = DataBindingUtil.setContentView(this, R.layout.activity_rgister);
regist_name = findViewById(R.id.regist_name);
regist_surname = findViewById(R.id.regist_surname);
regist_patronymic = findViewById(R.id.regist_patronymic);
regist_email = findViewById(R.id.regist_email);
regist_phone = findViewById(R.id.regist_phone);
regist_password = findViewById(R.id.regist_password);
regist_repassword = findViewById(R.id.regist_repassword);
regist_name.setFilters(new InputFilter[]{filter});
regist_surname.setFilters(new InputFilter[]{filter});
regist_patronymic.setFilters(new InputFilter[]{filter});
regist_email.setFilters(new InputFilter[]{filter});
regist_phone.setFilters(new InputFilter[]{filter});
regist_password.setFilters(new InputFilter[]{filter});
regist_repassword.setFilters(new InputFilter[]{filter});
rgisterBinding.bnRegister.setOnClickListener(view -> {
performSignUp();
rgisterBinding.showProgress.setVisibility(View.VISIBLE);
});
}
InputFilter filter = (source, start, end, dest, dstart, dend) -> {
for (int i = start; i < end; i++) {
if (Character.isWhitespace(source.charAt(i))) {
return "";
}
}
return null;
};
private void performSignUp() {
String userName = regist_name.getText().toString();
String userSurname = regist_surname.getText().toString();
String userPatronymic = regist_patronymic.getText().toString();
String userEmail = regist_email.getText().toString();
String userPhone = regist_phone.getText().toString();
String userPassword = regist_password.getText().toString();
String userRepassword = regist_repassword.getText().toString();
Call<ApiResponse> call = ApiClient.getApiClient().create(ApiInterface.class).performUserSignIn(userName, userSurname,
userPatronymic, userEmail, userPhone, userPassword, userRepassword);
call.enqueue(new Callback<ApiResponse>() {
@Override
public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response)
{
if (response.code() == 200)
{
if (response.body().getStatus().equals("ok"))
{
if (response.body().getResultCode()==1)
{
Toast.makeText(RgisterActivity.this, R.string.Registration_completed, Toast.LENGTH_SHORT).show();
onBackPressed();
finish();
} else {
displayUserInfo(getString(R.string.User_already_exists));
rgisterBinding.registPassword.setText("");
}
} else {
displayUserInfo(getString(R.string.Something_went_wrong));
rgisterBinding.registPassword.setText("");
}
} else {
displayUserInfo(getString(R.string.Something_went_wrong));
rgisterBinding.registPassword.setText("");
}
}
@Override
public void onFailure(Call<ApiResponse> call, Throwable t) {
}
});
}
private void displayUserInfo(String message) {
Snackbar.make(rgisterBinding.myLayout, message, Snackbar.LENGTH_SHORT).show();
rgisterBinding.registPassword.setText("");
rgisterBinding.showProgress.setVisibility(View.INVISIBLE);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
Ответы (3 шт):
if (string.length() > 5 && string.length() < 15) {
Toast.makeText(this, "Нужно ввести минимум 5 и максимум 15 символов", Toast.LENGTH_SHORT).show();
}
Можно решить так:
private boolean validate(String userName /**тут остальные параметры**/) {
boolean result = true;
if(userName.length() < 5 || userName.length() > 15){
result = false;
}
/**Тут проверяете остальные параметры**/
return result;
}
Вызываете перед отправкой на сервер:
/**performSignUp()**/
...
String userRepassword = regist_repassword.getText().toString();
if(validate(userName /**Тут остальные параметры передаете**/)){
/**Отправка на сервер**/
}else{
Toast.makeText(this, "Нужно ввести минимум 5 и максимум 15 символов", Toast.LENGTH_SHORT).show();
}
Можно вообще сделать все более красиво. Вешаете на ваш EditText TextWatcher. И в нем проверяете каждый раз кол-во введенных символов. И только когда этих символов введено достаточно - разблокируете кнопку регистрации:
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {
if(s.length() >= 5 && s.length() <= 15) {
// разблокировать кнопку
} else if (s.length() < 5) {
// подсветить где-то надпись, что нужен более длинный логин и заблочить кнопку
} else {
// нужен более короткий логин и заблочить кнопку
}
}
});
Таким образом у вас после каждого символа будет производится проверка на то сколько символов ввел пользователь и выдавать нужную подсказку