检查EditText是否为空。[关闭]


217

EditTexts在Android中有5个供用户输入。我想知道是否有一种方法可以检查所有5个EditTexts是否为空。有什么办法吗?

Answers:


366

我曾经做过这样的事情;

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 2011年

43
抱歉,您是学究的,但是您没有在Java中编写函数,它们被称为方法...
WiZarD 2013年

1
如果EditText.setInputType(InputType.TYPE_CLASS_NUMBER); 数字,这不起作用
Zala Janaksinh

64
你们都使它变得比其需要更难:TextUtils.isEmpty(editText.getText());
martyglaubitz 2014年

4
我通常使用if(usernameEditText.getText()。toString()。toString()。isEmpty())
Daniel Jonker 2014年

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为,not empty而return true表示edittext为empty...


29
+1检查长度比检查空字符串恕我直言更好。这将有助于在检查长度之前修剪字符串,以便不计入空格字符。顺便说一句,有什么特殊的原因不使用return etText.getText().toString().trim().length() == 0而不是对/错分支?
奥德留斯

1
好吧,我想代码的可读性和可维护性...
WiZarD 2013年

如果EditText.setInputType(InputType.TYPE_CLASS_NUMBER); 数字,然后使用它。
Zala Janaksinh

是的,它的工作是因为它取决于长度...
SBJ

private Boolean isEmpty(EditText etText){return etText.Text.ToString().Trim().Length == 0;}VS 2019
Siddharth Rout

144

为了验证EditText,请使用EditText#setError 方法显示错误并检查空值或null值,请使用内置的android类 TextUtils.isEmpty(strVar),如果strVar为null或长度为零,则返回true

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

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

图片取自Google搜索


您应该)在if语句中添加另一个。
ʍѳђઽ9ท

1
@Androidenthusiasts感谢您指出我的错字错误,我已经更新了我的答案:)
MilapTank

无法理解第二个字段““ usernameEditText”“”字符串strUserName = usernameEditText.getText()。toString();“在哪里声明?
山姆

@山姆我的错别字我已经更新了我的答案usernameEditTextEditText对象,现在将其重命名为 etUserName
MilapTank

1
.toString();不需要
MariuszS '16

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'3

28

在这里参加聚会很晚,但我只需要添加Android自己的TextUtils.isEmpty(CharSequence str)

如果字符串为null或长度为0,则返回true

因此,如果将五个EditText放在列表中,则完整的代码为:

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

isEmpty()不检查空格,请尝试输入一个空格
2013年

3
@Hunt是的,但是它不再是空或null了。也许TextUtils.isEmpty(sUserName.trim())适合删除所有空格,以防万一用户输入了一个或几个空格?
Qw4z1 2013年

isEmpty()接受CharSequence,它Editable扩展了,因此无需调用.toString()它。
karl 2014年

@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()from EditText

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

6

我通常按​​照SBJ的建议去做,但反之亦然。我只是通过检查肯定的结果而不是双重否定发现更容易理解我的代码。您可能会问如何检查EdiText是否为空,但是您真正想知道的是它是否具有任何内容,而不是不为空。

像这样:

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

我想做类似的事情。但是从编辑文本中获取文本值并像(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
if ( (usernameEditText.getText()+"").equals("") ) { 
    // Really just another way
}

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();
}

当然,这种模式可以扩展到检查任意数量的视图上的任何属性。如果可以这样称呼,那么唯一的缺点就是视图的冗余。就是说,要使用这些EditText,还必须将它们绑定到单个变量,以便可以按名称引用它们,或者必须按列表中的位置引用引用(edits.get(0)等)。就我个人而言,我只将它们分别绑定两次,一次绑定到单个变量,一次绑定到列表,并使用适当的方式。


0

要使editText为空,请尝试以下另一种简单方法:

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,然后将其转换为字符串,最后与""using .equals方法进行比较。


0

此功能对我有用

私人无效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();
            }
            }
            }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.