Überprüfen Sie, ob EditText leer ist. [geschlossen]


218

Ich habe 5 EditTextsin Android für Benutzer zur Eingabe. Ich würde gerne wissen, ob ich eine Methode haben könnte, um alle 5 zu überprüfen, EditTextswenn sie null sind. Gibt es eine Möglichkeit, dies zu tun?

Antworten:


367

Ich habe so etwas einmal gemacht;

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
Ja, tut mir leid, ich habe vergessen, dass du fünf hattest. Sie können eine Funktion erstellen, die dasselbe tut, und sie fünfmal aufrufen - oder Sie können die fünf EditText-Funktionen durchlaufen.
Cvaldemar

43
Tut mir leid, pedantisch zu sein, aber Sie schreiben keine Funktionen in Java, sie werden Methoden genannt ...
WiZarD

1
if EditText.setInputType (InputType.TYPE_CLASS_NUMBER); Nummer das funktioniert nicht
Zala Janaksinh

64
Sie machen es schwieriger als es sein muss: TextUtils.isEmpty (editText.getText ());
Martyglaubitz

4
Ich benutze normalerweise if (BenutzernameEditText.getText (). ToString (). ToString (). IsEmpty ())
Daniel Jonker

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

    return true;
}

ODER Nach Audrius

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

Wenn die Funktion return falsebedeutet, dass edittext ist not emptyund return truebedeutet, dass edittext ist empty...


29
+1 Die Länge zu überprüfen ist besser als IMHO nach leeren Zeichenfolgen zu suchen. Es wäre hilfreich, die Zeichenfolge vor dem Überprüfen der Länge zu kürzen, damit Leerzeichen nicht gezählt werden. Übrigens, gibt es einen bestimmten Grund, keine return etText.getText().toString().trim().length() == 0wahren / falschen Zweige zu verwenden?
Audrius

1
Nun,

if EditText.setInputType (InputType.TYPE_CLASS_NUMBER); Nummer dann verwenden Sie diese.
Zala Janaksinh

Ja, es funktioniert, weil es von der Länge abhängt ...
SBJ

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

145

Verwenden Sie zum Überprüfen von EditText die Methode EditText # setError , um Fehler anzuzeigen und leere oder Nullwerte zu überprüfen. Verwenden Sie die integrierte Android-Klasse TextUtils.isEmpty (strVar), die true zurückgibt, wenn strVar null oder null ist

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

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

Bild aus der Google-Suche


Sie sollten )der if-Anweisung eine weitere hinzufügen .
23 ઽ ૯ ท

1
@ Androidenthusiasts danke für den Hinweis auf meinen Tippfehler Ich habe meine Antwort aktualisiert :)
MilapTank

Konnte das zweite Feld "" usernameEditText "" "nicht verstehen. String strUserName = usernameEditText.getText (). ToString ();" Wo wird es deklariert?
Sam

@ Sam es ist mein Tippfehler Ich habe Update meine Antwort usernameEditTextist EditTextObjekt und jetzt ist es umbenannt in etUserName
MilapTank

1
.toString();ist nicht erforderlich
MariuszS

36

Versuche dies :

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

oder verwenden Sie die TextUtils- Klasse wie folgt :

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

3
... das ist der beste Weg, dies zu tun. Andere Beispiele ermöglichen Eingaben, die nicht berücksichtigt werden.
Dell116

29

Viel zu spät zur Party hier, aber ich muss nur Android's eigene TextUtils.isEmpty (CharSequence str) hinzufügen

Gibt true zurück, wenn die Zeichenfolge null oder 0 lang ist

Wenn Sie also Ihre fünf EditTexts in eine Liste aufnehmen, lautet der vollständige Code:

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

isEmpty () sucht nicht nach Leerzeichen, versuchen Sie, ein Leerzeichen
Hunt

3
@Hunt Das stimmt, aber dann wäre es nicht mehr leer oder null. Vielleicht wäre TextUtils.isEmpty (sUserName.trim ()) angebracht, um alle Leerzeichen zu entfernen, nur für den Fall, dass der Benutzer ein oder mehrere Leerzeichen eingegeben hat?
Qw4z1

isEmpty()nimmt ein CharSequence, das sich Editableausdehnt, so dass es nicht nötig ist, es aufzurufen .toString().
Karl

@karl Guter Punkt! Meine Antwort wurde aktualisiert.
Qw4z1

19

Andere Antworten sind richtig, aber machen Sie es in kurzer Zeit wie

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


7

Warum nicht einfach die Schaltfläche deaktivieren, wenn EditText leer ist? IMHO Das sieht professioneller aus:

        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

Sie können length()von verwenden EditText.

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

6

Normalerweise mache ich das, was SBJ vorschlägt, aber umgekehrt. Ich finde es einfach einfacher, meinen Code zu verstehen, indem ich nach positiven Ergebnissen anstatt nach doppelten Negativen suche. Sie fragen sich vielleicht, wie Sie nach leeren EdiTexts suchen sollen, aber Sie möchten wirklich wissen, ob sie Inhalte enthalten und nicht, dass sie nicht leer sind.

Wie so:

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

Als SBJ ziehe ich es vor, falsestandardmäßig "hat keinen Inhalt" (oder ) zurückzugeben, um Ausnahmen zu vermeiden, da ich meine Inhaltsprüfung abgebrochen habe. Auf diese Weise können Sie absolut sicher sein, dass a truedurch Ihre Schecks "genehmigt" wurde.

Ich denke auch, dass die ifBerufung ein bisschen sauberer aussieht:

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

Es hängt sehr stark von den Vorlieben ab, aber ich finde das leichter zu lesen. :) :)


4

Ich benutze diese Methode, trim()um Leerzeichen zu vermeiden:

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

Ein Beispiel, wenn Sie mehrere EditText´s haben

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

Sie können TextUtils.isEmpty wie mein Beispiel verwenden! Viel Glück


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

3

Ich habe dafür verwendet TextUtils:

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

2

Sie können auch alle EditText-Zeichenfolgen in einer If-Bedingung überprüfen: so

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

2

Ich wollte etwas Ähnliches machen. Aber den Textwert aus dem Bearbeiten von Text zu erhalten und ihn so zu vergleichen, (str=="")als würde er bei mir nicht funktionieren. Die bessere Option war also:

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

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

Lief wie am Schnürchen.


2

Probieren Sie dies mit If ELSE If-Bedingungen aus. Sie können Ihre editText-Felder einfach überprüfen.

 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

Sie können diese Funktion für jeden der Bearbeitungstexte aufrufen:

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

Sie sehen die Nachricht in LogCat ....


1

"Schau dir das an, ich bin mir sicher, dass es dir gefallen wird."

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

Mit diesem Funktionscode können Sie Leerzeichen am Anfang und Ende der Zeichenfolge löschen. Wenn die Zeichenfolge "" ist, geben Sie die Meldung "error" zurück, andernfalls haben Sie eine Zeichenfolge

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

Bitte fügen Sie eine kurze Erklärung Ihres Codes hinzu.
Terru_theTerror

stackoverflow.com/questions/61766882/… können Sie mir bei meinem Problem helfen?
Sonniger

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");

}

Tun Sie dies für alle fünf Text bearbeiten


0

Sie können verwenden setOnFocusChangeListener, es wird überprüft, wenn sich der Fokus ändert

        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

Ich bevorzuge es, die ButterKnife-Listenbindung zu verwenden und dann Aktionen auf die Liste anzuwenden. Im Fall von EditTexts sind beispielsweise die folgenden benutzerdefinierten Aktionen in einer Dienstprogrammklasse definiert (in diesem Fall 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());
    }
};

Und im Ansichtscode binde ich die EditTexts an eine Liste und wende die Aktionen an, wenn ich die Ansichten überprüfen muss.

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

Und natürlich ist dieses Muster erweiterbar, um jede Eigenschaft in einer beliebigen Anzahl von Ansichten zu überprüfen. Der einzige Nachteil, wenn Sie es so nennen können, ist die Redundanz der Ansichten. Das heißt, um diese EditTexts zu verwenden, müssten Sie sie auch an einzelne Variablen binden, damit Sie sie nach Namen referenzieren können, oder Sie müssten sie nach Position in der Liste ( edits.get(0)usw.) referenzieren . Persönlich binde ich jeden von ihnen nur zweimal, einmal an eine einzelne Variable und einmal an eine Liste und verwende, je nachdem, was angemessen ist.


0

Um editText ist leer, versuchen Sie es auf eine andere einfache Weise:

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

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

Warum Fall ignorieren?!
Tima

0

Probieren Sie es aus: Es ist in 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()
    }
}

Danke dir


0

Folgendes funktioniert für mich in einer Aussage:

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

Zuerst rufe ich einen Text aus dem ab, EditTextkonvertiere ihn dann in einen String und vergleiche ihn schließlich mit der Methode ""using .equals.


0

Diese Funktion funktioniert für mich

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();
            }
            }
            }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.