ตรวจสอบว่า 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
ถ้า EditText.setInputType (InputType.TYPE_CLASS_NUMBER); หมายเลขนี้ไม่ทำงาน
Zala Janaksinh

64
คุณต้องทำให้มันยากกว่าที่ควรจะเป็น: TextUtils.isEmpty (editText.getText ());
martyglaubitz

4
ฉันมักจะใช้ถ้า (usernameEditText.getText (). toString (). toString (). isEmpty ())
Daniel Jonker

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

    return true;
}

หรือตามaudrius

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

ถ้าฟังก์ชันส่งคืนfalseหมายถึง edittext is not emptyและ return trueหมายความว่า edittext คือempty...


29
+1 การตรวจสอบความยาวนั้นดีกว่าการตรวจสอบสตริงว่าง IMHO มันจะช่วยตัดทอนสตริงก่อนที่จะตรวจสอบความยาวเพื่อไม่ให้มีการนับอักขระเว้นวรรค ด้วยเหตุผลใดก็ตามที่ไม่ได้ใช้return etText.getText().toString().trim().length() == 0แทนสาขาจริง / เท็จ?
Audrius

1
ดีฉันเดารหัสอ่านง่ายและการบำรุงรักษา ...
WiZarD

ถ้า EditText.setInputType (InputType.TYPE_CLASS_NUMBER); หมายเลขจากนั้นใช้สิ่งนี้
Zala Janaksinh

ใช่มันใช้งานได้เพราะมันขึ้นอยู่กับความยาว ...
SBJ

private Boolean isEmpty(EditText etText){return etText.Text.ToString().Trim().Length == 0;}VS 2019
เส้นทาง Siddharth

145

สำหรับการตรวจสอบความถูกต้องของ EditText ใช้EditText # setError วิธีการแสดงข้อผิดพลาดและการตรวจสอบค่าว่างหรือค่าว่างใช้คลาส Android inbuilt TextUtils.isEmpty (strVar)ซึ่งคืนค่าจริงถ้า 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 ขอบคุณสำหรับการชี้ว่ามันผิดพลาดพิมพ์ผิดของฉันฉันได้ปรับปรุงคำตอบของฉัน :)
MilapTank

ไม่เข้าใจฟิลด์ที่สอง "" usernameEditText "" "String strUserName = usernameEditText.getText (). toString ();" มันประกาศที่ไหน?
แซม

@Sam มันพิมพ์ผิดฉันได้อัปเดตคำตอบของฉันusernameEditTextคือEditTextวัตถุและตอนนี้มันเปลี่ยนชื่อเป็น etUserName
MilapTank

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

มาสายปาร์ตี้กันที่นี่ แต่ฉันต้องเพิ่มTextUtils.isEmptyของ Android ของตัวเอง(CharSequence str)

ผลตอบแทนจริงถ้าสตริงเป็นโมฆะหรือ 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 ว่างเปล่า IMHO ซึ่งดูเป็นมืออาชีพมากขึ้น:

        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) {

        }
       });


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) เป็นค่าเริ่มต้นเพื่อหลีกเลี่ยงข้อยกเว้นเนื่องจากฉัน borked ตรวจสอบเนื้อหาของฉัน ด้วยวิธีนี้คุณจะมั่นใจได้อย่างแน่นอนว่า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

ฉันใช้TextUtilsสิ่งนี้:

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

2

นอกจากนี้คุณยังสามารถตรวจสอบ EditText Strings ทั้งหมดในหนึ่งเงื่อนไขถ้าเช่นนี้

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

ทำไมไม่สนใจเคส?!
Tima

0

ลองใช้ดูสิ: มันอยู่ใน Kotlin

//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

ฟังก์ชั่นนี้ใช้งานได้สำหรับฉัน

โมฆะส่วนตัว 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();
            }
            }
            }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.