Проверьте, является ли EditText пустым. [закрыто]


218

У меня есть 5 EditTextsв Android для пользователей для ввода. Я хотел бы знать, мог бы я иметь метод для проверки всех 5, EditTextsесли они нулевые. Есть какой-либо способ сделать это??

Ответы:


367

Однажды я сделал что-то подобное;

EditText usernameEditText = (EditText) findViewById(R.id.editUsername);
sUsername = usernameEditText.getText().toString();
if (sUsername.matches("")) {
    Toast.makeText(this, "You did not enter a username", Toast.LENGTH_SHORT).show();
    return;
}

4
да извини, забыл, что у тебя было пять. Вы могли бы создать функцию, которая делала бы то же самое, и вызывать ее пять раз - или вы могли бы перебрать пять EditText.
cvaldemar

43
Извините за педантичность, но вы не пишете функции в Java, они называются методами ...
WiZarD

1
if EditText.setInputType (InputType.TYPE_CLASS_NUMBER); число это не работает
Zala Janaksinh

64
Вы делаете это сложнее, чем нужно: TextUtils.isEmpty (editText.getText ());
martyglaubitz

4
Я обычно использую if (usernameEditText.getText (). ToString (). ToString (). IsEmpty ())
Даниэль Джонкер,

185
private boolean isEmpty(EditText etText) {
    if (etText.getText().toString().trim().length() > 0) 
        return false;

    return true;
}

ИЛИ Согласно Аудриусу

  private boolean isEmpty(EditText etText) {
        return etText.getText().toString().trim().length() == 0;
    }

Если функция return falseозначает, что edittext is, not emptyа return trueозначает, что edittext is empty...


29
+1 Проверка длины лучше, чем проверка на пустую строку ИМХО. Это поможет обрезать строку перед проверкой длины, чтобы пробельные символы не учитывались. Кстати, какая-то конкретная причина не использовать return etText.getText().toString().trim().length() == 0вместо истинных / ложных ветвей?
Аудрюс

1
ну, я думаю, читаемость кода и ремонтопригодность ...
WiZarD

if EditText.setInputType (InputType.TYPE_CLASS_NUMBER); номер затем используйте это.
Зала Джанаксин,

Да, это работает, потому что это зависит от длины ...
SBJ

private Boolean isEmpty(EditText etText){return etText.Text.ToString().Trim().Length == 0;}VS 2019
Сиддхарт Роу

145

Для проверки EditText используйте метод EditText # setError для показа ошибки и для проверки пустого или нулевого значения, используйте встроенный класс android TextUtils.isEmpty (strVar), который возвращает true, если strVar равен нулю или нулевой длине

EditText etUserName = (EditText) findViewById(R.id.txtUsername);
String strUserName = etUserName.getText().toString();

 if(TextUtils.isEmpty(strUserName)) {
    etUserName.setError("Your message");
    return;
 }

Изображение взято из поиска Google


Вы должны добавить еще один )в операторе if.
ท ઽ ૯ ท

1
@Androidenthusiasts спасибо за указание на мою опечатку, я
обновил

Не удалось понять второе поле "" usernameEditText "" "String strUserName = usernameEditText.getText (). ToString ();" где оно объявлено?
Сэм

@Sam это моя опечатка, я usernameEditTextEditTextetUserName
обновил

1
.toString();не требуется
MariuszS

36

попробуй это :

EditText txtUserName = (EditText) findViewById(R.id.txtUsername);
String strUserName = usernameEditText.getText().toString();
if (strUserName.trim().equals("")) {
    Toast.makeText(this, "plz enter your name ", Toast.LENGTH_SHORT).show();
    return;
}

или используйте класс TextUtils следующим образом:

if(TextUtils.isEmpty(strUserName)) {
    Toast.makeText(this, "plz enter your name ", Toast.LENGTH_SHORT).show();
    return;
}

3
... это лучший способ сделать это. Другие примеры позволяют вводить данные, которые не учитываются.
dell116

29

Уже поздно на вечеринку, но мне просто нужно добавить собственный Android TextUtils.isEmpty (CharSequence str)

Возвращает true, если строка имеет нулевое значение или длину 0

Таким образом, если вы поместите свои пять EditTexts в список, полный код будет:

for(EditText edit : editTextList){
    if(TextUtils.isEmpty(edit.getText()){
        // EditText was empty
        // Do something fancy
    }
}

isEmpty () не проверяет наличие пробела, попробуйте ввести один пробел
Hunt

3
@ Hunt Это правда, но тогда он больше не будет пустым или нулевым. Может быть, TextUtils.isEmpty (sUserName.trim ()) подойдет, чтобы удалить все пробелы, на тот случай, если пользователь ввел один или несколько пробелов?
Qw4z1

isEmpty()принимает CharSequence, который Editableрасширяется, поэтому нет необходимости вызывать .toString()его.
Карл

@karl Хороший вопрос! Обновил мой ответ.
Qw4z1

19

Другие ответы верны, но делайте это кратко, как

if(editText.getText().toString().isEmpty()) {
     // editText is empty
} else {
     // editText is not empty
}


7

Почему бы просто не отключить кнопку, если EditText пуст? ИМХО это выглядит более профессионально

        final EditText txtFrecuencia = (EditText) findViewById(R.id.txtFrecuencia);  
        final ToggleButton toggle = (ToggleButton) findViewById(R.id.toggleStartStop);
        txtFrecuencia.addTextChangedListener(new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
            toggle.setEnabled(txtFrecuencia.length() > 0);
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {

        }
       });

7

Вы можете использовать length()с EditText.

public boolean isEditTextEmpty(EditText mInput){
   return mInput.length() == 0;
}

6

Я обычно делаю то, что предлагает SBJ , но наоборот. Мне просто легче понять мой код, проверяя положительные результаты вместо двойных отрицательных. Вы можете спросить, как проверить наличие пустых EdiTexts, но вы действительно хотите знать, есть ли у него какой-либо контент, а не что он не пустой.

Вот так:

private boolean hasContent(EditText et) {
    // Always assume false until proven otherwise
    boolean bHasContent = false; 

    if (et.getText().toString().trim().length() > 0) {
        // Got content
        bHasContent = true;
    }
    return bHasContent;
}

Как SBJ я предпочитаю возвращать «не имеет содержимого» (или false) по умолчанию, чтобы избежать исключений, потому что я проверил свою проверку содержимого. Таким образом, вы будете абсолютно уверены, что trueваши чеки были «одобрены».

Я также думаю, что ifвызов выглядит немного чище:

if (hasContent(myEditText)) {
// Act upon content
} else {
// Got no content!
}

Это очень сильно зависит от предпочтений, но я считаю, что это легче читать. :)


4

Я использую этот метод, который использует, trim()чтобы избежать пробелов:

EditText myEditText = (EditText) findViewById(R.id.editUsername);
if ("".equals(myEditText.getText().toString().trim()) {
    Toast.makeText(this, "You did not enter a value!", Toast.LENGTH_LONG).show();
    return;
}

пример, если у вас есть несколько EditText

if (("".equals(edtUser.getText().toString().trim()) || "".equals(edtPassword.getText().toString().trim()))){
        Toast.makeText(this, "a value is missing!", Toast.LENGTH_LONG).show();
        return;
}

4
if(TextUtils.isEmpty(textA.getText())){
            showToast(it's Null");
        }

Вы можете использовать TextUtils.isEmpty как мой пример! Удачи


3
private boolean hasContent(EditText et) {
       return (et.getText().toString().trim().length() > 0);
}

3

Я использовал TextUtilsдля этого:

if (TextUtils.isEmpty(UsernameInfo.getText())) {
    validationError = true;
    validationErrorMessage.append(getResources().getString(R.string.error_blank_username));
}

2

Вы также можете проверить все строки EditText в одном условии If: как это

if (mString.matches("") || fString.matches("") || gender==null || docString.matches("") || dString.matches("")) {
                Toast.makeText(WriteActivity.this,"Data Incomplete", Toast.LENGTH_SHORT).show();
            }

2

Я хотел сделать что-то подобное. Но получить текстовое значение из редактируемого текста и сравнить его, как (str=="")у меня не получалось . Так что лучше вариант был:

EditText eText = (EditText) findViewById(R.id.etext);

if (etext.getText().length() == 0)
{//do what you want }

Работал как шарм.


2

Попробуйте это, используя условия If ELSE If. Вы можете легко проверить свои поля editText.

 if(TextUtils.isEmpty(username)) {
                userNameView.setError("User Name Is Essential");
                return;
         } else  if(TextUtils.isEmpty(phone)) {
                phoneView.setError("Please Enter Your Phone Number");
                return;
            }

2

Вы можете вызвать эту функцию для каждого из редактируемых текстов:

public boolean isEmpty(EditText editText) {
    boolean isEmptyResult = false;
    if (editText.getText().length() == 0) {
        isEmptyResult = true;
    }
    return isEmptyResult;
}

1
EditText txtUserID = (EditText) findViewById(R.id.txtUserID);

String UserID = txtUserID.getText().toString();

if (UserID.equals("")) 

{
    Log.d("value","null");
}

Вы увидите сообщение в LogCat ....


1

"Проверьте это, я уверен, вам понравится."

log_in.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        username=user_name.getText().toString();
        password=pass_word.getText().toString();
        if(username.equals(""))
        {
            user_name.setError("Enter username");
        }
        else if(password.equals(""))
        {
            pass_word.setError("Enter your password");
        }
        else
        {
            Intent intent=new Intent(MainActivity.this,Scan_QRActivity.class);
            startActivity(intent);
        }
    }
});


1

с помощью этого короткого кода вы можете удалить пустое место в начале и конце строки. Если строка "", верните сообщение "ошибка", иначе вы получите строку

EditText user = findViewById(R.id.user); 
userString = user.getText().toString().trim(); 
if (userString.matches("")) {
    Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
    return; 
}else{
     Toast.makeText(this, "Ok", Toast.LENGTH_SHORT).show();
}

Пожалуйста, добавьте краткое объяснение вашего кода.
Terru_theTerror

stackoverflow.com/questions/61766882/… Можете ли вы помочь мне с моей проблемой ??
Солнечный

0
EditText edt=(EditText)findViewById(R.id.Edt);

String data=edt.getText().toString();

if(data=="" || data==null){

 Log.e("edit text is null?","yes");

}

else {

 Log.e("edit text is null?","no");

}

делай так для всех пяти правок


0

Вы можете использовать setOnFocusChangeListener, он будет проверять, когда изменение фокуса

        txt_membername.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            if (arg1) {
                //do something
            } else {
                if (txt_membername.getText().toString().length() == 0) {
                    txt_membername
                            .setError("Member name is not empty, Plz!");
                }
            }
        }
    });


0

Я предпочитаю использовать привязку списка ButterKnife, а затем применять действия в списке. Например, в случае EditTexts у меня есть следующие пользовательские действия, определенные в служебном классе (в этом случае ButterKnifeActions)

public static <V extends View> boolean checkAll(List<V> views, ButterKnifeActions.Check<V> checker) {
    boolean hasProperty = true;
    for (int i = 0; i < views.size(); i++) {
        hasProperty = checker.checkViewProperty(views.get(i), i) && hasProperty;
    }
    return hasProperty;
}

public static <V extends View> boolean checkAny(List<V> views, ButterKnifeActions.Check<V> checker) {
    boolean hasProperty = false;
    for (int i = 0; i < views.size(); i++) {
        hasProperty = checker.checkViewProperty(views.get(i), i) || hasProperty;
    }
    return hasProperty;
}

public interface Check<V extends View> {
    boolean checkViewProperty(V view, int index);
}

public static final ButterKnifeActions.Check<EditText> EMPTY = new Check<EditText>() {
    @Override
    public boolean checkViewProperty(EditText view, int index) {
        return TextUtils.isEmpty(view.getText());
    }
};

И в коде представления я связываю EditTexts со списком и применяю действия, когда мне нужно проверить представления.

@Bind({R.id.edit1, R.id.edit2, R.id.edit3, R.id.edit4, R.id.edit5}) List<EditView> edits;
...
if (ButterKnifeActions.checkAny(edits, ButterKnifeActions.EMPTY)) {
    Toast.makeText(getContext(), "Please fill in all fields", Toast.LENGTH_SHORT).show();
}

И, конечно, этот шаблон можно расширить для проверки любого свойства в любом количестве просмотров. Единственным недостатком, если можно так назвать, является избыточность представлений. То есть, чтобы использовать эти EditTexts, вы должны будете также связать их с отдельными переменными, чтобы вы могли ссылаться на них по имени, или вам нужно было бы ссылаться на них по положению в списке ( edits.get(0)и т. Д.). Лично я просто связываю каждый из них дважды, один раз с одной переменной и один раз со списком и использую то, что подходит.


0

Чтобы отредактировать текст, попробуйте другой простой способ:

String star = editText.getText().toString();

if (star.equalsIgnoreCase("")) {
  Toast.makeText(getApplicationContext(), "Please Set start no", Toast.LENGTH_LONG).show();
}

почему игнорировать дело ?!
Тима

0

Попробуйте это: его в Котлине

//button from xml
button.setOnClickListener{                                         
    val new=addText.text.toString()//addText is an EditText
    if(new=isNotEmpty())
    {
         //do something
    }
    else{
        new.setError("Enter some msg")
        //or
        Toast.makeText(applicationContext, "Enter some message ", Toast.LENGTH_SHORT).show()
    }
}

Спасибо


0

Следующее работает для меня все в одном утверждении:

if(searchText.getText().toString().equals("")) 
    Log.d("MY_LOG", "Empty");

Сначала я извлекаю текст из, EditTextа затем преобразовываю его в строку и, наконец, сравниваю с ""использованием .equalsметода.


0

эта функция работает для меня

private void checkempForm () {

    EditText[] allFields = { field1_txt, field2_txt, field3_txt, field4_txt};
    List<EditText> ErrorFields =new ArrayList<EditText>();//empty Edit text arraylist
            for(EditText edit : allFields){
                if(TextUtils.isEmpty(edit.getText())){ 

            // EditText was empty
             ErrorFields.add(edit);//add empty Edittext only in this ArayList
            for(int i = 0; i < ErrorFields.size(); i++)
            {
                EditText currentField = ErrorFields.get(i);
                currentField.setError("this field required");
                currentField.requestFocus();
            }
            }
            }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.