Vérifiez si EditText est vide. [fermé]


218

J'en ai 5 EditTextsdans Android pour que les utilisateurs puissent les saisir. Je voudrais savoir si je pourrais avoir une méthode pour vérifier tous les 5 EditTextss'ils sont nuls. Y a-t-il un moyen de faire ça??

Réponses:


367

J'ai fait quelque chose comme ça une fois;

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
oui désolé, j'ai oublié que tu en avais cinq. Vous pouvez créer une fonction qui fait la même chose et l'appeler cinq fois - ou vous pouvez faire une boucle sur les cinq EditText.
cvaldemar

43
Désolé d'être pédant, mais vous n'écrivez pas de fonctions en java elles sont appelées méthodes ...
WiZarD

1
if EditText.setInputType (InputType.TYPE_CLASS_NUMBER); nombre cela ne fonctionne pas
Zala Janaksinh

64
vous le rendez plus difficile que nécessaire: TextUtils.isEmpty (editText.getText ());
martyglaubitz

4
J'utilise habituellement if (usernameEditText.getText (). ToString (). ToString (). IsEmpty ())
Daniel Jonker

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

    return true;
}

OU selon audrius

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

Si la fonction return falsesignifie edittext est not emptyet return truesignifie edittext est empty...


29
+1 La vérification de la longueur est meilleure que la vérification de la chaîne vide à mon humble avis. Il serait utile de couper la chaîne avant de vérifier la longueur afin que les espaces ne soient pas comptés. Btw, une raison particulière de ne pas utiliser return etText.getText().toString().trim().length() == 0au lieu de vraies / fausses branches?
Audrius

1
eh bien je suppose que la lisibilité et la maintenabilité du code ...
WiZarD

if EditText.setInputType (InputType.TYPE_CLASS_NUMBER); puis utilisez-le.
Zala Janaksinh

Oui ça marche car ça dépend de la longueur ...
SBJ

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

145

Pour valider EditText, utilisez la méthode EditText # setError pour afficher l'erreur et pour vérifier la valeur vide ou nulle, utilisez la classe Android intégrée TextUtils.isEmpty (strVar) qui retourne vrai si strVar est de longueur nulle ou nulle

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

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

Image prise à partir de la recherche Google


vous devez en ajouter un autre )dans l'instruction if.
ʍѳђ ઽ ૯ ท

1
@Androidenthusiasts merci de l'avoir pointé mon erreur de frappe j'ai mis à jour ma réponse :)
MilapTank

Impossible de comprendre le deuxième champ "" usernameEditText "" "String strUserName = usernameEditText.getText (). ToString ();" où est-il déclaré?
Sam

@Sam c'est ma faute de frappe j'ai mis à jour ma réponse usernameEditTextest EditTextobjet et maintenant son renommé en etUserName
MilapTank

1
.toString();n'est pas requis
MariuszS

36

essaye ça :

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

ou utilisez la classe TextUtils comme ceci:

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

3
... c'est la meilleure façon de le faire. D'autres exemples permettent une entrée qui n'est pas prise en compte.
dell116

29

Bien tard pour la fête ici, mais je dois juste ajouter le propre TextUtils.isEmpty d' Android (chaîne CharSequence)

Renvoie vrai si la chaîne est nulle ou de longueur 0

Donc, si vous mettez vos cinq EditTexts dans une liste, le code complet serait:

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

isEmpty () ne vérifie pas l'espace vide, essayez d'entrer un espace
Hunt

3
@Hunt C'est vrai, mais il ne serait plus vide ni nul. Peut-être que TextUtils.isEmpty (sUserName.trim ()) serait approprié, pour supprimer tous les blancs, juste au cas où l'utilisateur aurait entré un ou plusieurs espaces vides?
Qw4z1

isEmpty()prend un CharSequence, qui Editables'étend, il n'est donc pas nécessaire de faire appel .toString()à lui.
karl

@karl Bon point! Mis à jour ma réponse.
Qw4z1

19

D'autres réponses sont correctes, mais faites-le brièvement comme

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


7

Pourquoi ne pas simplement désactiver le bouton si EditText est vide? IMHO Cela semble plus professionnel:

        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

Vous pouvez utiliser à length()partir de EditText.

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

6

Je fais habituellement quoi SBJ propose, mais l'inverse. Je trouve simplement plus facile de comprendre mon code en vérifiant les résultats positifs plutôt que les doubles négatifs. Vous demandez peut-être comment vérifier les EdiTexts vides, mais ce que vous voulez vraiment savoir, c'est s'il a du contenu et non qu'il n'est pas vide.

Ainsi:

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

En tant que SBJ, je préfère retourner "n'a pas de contenu" (ou false) par défaut pour éviter les exceptions car j'ai falsifié ma vérification de contenu. De cette façon, vous serez absolument certain qu'untrue a été "approuvé" par vos chèques.

Je pense aussi que la ifvocation est un peu plus propre:

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

Cela dépend beaucoup des préférences, mais je trouve cela plus facile à lire. :)


4

J'utilise cette méthode, qui utilise trim()pour éviter les espaces vides:

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

un exemple si vous avez plusieurs 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");
        }

vous pouvez utiliser TextUtils.isEmpty comme mon exemple! Bonne chance


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

3

J'ai utilisé TextUtilspour ça:

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

2

Vous pouvez également vérifier toutes les chaînes EditText en une seule condition If: comme ceci

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

2

Je voulais faire quelque chose de similaire. Mais obtenir la valeur du texte à partir du texte modifié et le comparer comme (str=="")ne fonctionnait pas pour moi. La meilleure option était donc:

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

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

A fonctionné comme un charme.


2

Essayez ceci en utilisant les conditions If ELSE If. Vous pouvez facilement valider vos champs 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

Vous pouvez appeler cette fonction pour chacun des textes d'édition:

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

Vous verrez le message dans LogCat ....


1

"Vérifiez cela, je suis sûr que vous l'aimerez."

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

avec ce code court, vous pouvez supprimer un espace vide au début et à la fin de la chaîne. Si la chaîne est "" renvoie le message "erreur" sinon vous avez une chaîne

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

Veuillez ajouter une courte explication de votre code.
Terru_theTerror

stackoverflow.com/questions/61766882/… pouvez-vous m'aider avec mon problème ??
Sunny

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

}

faire comme ça pour les cinq éditer le texte


0

Vous pouvez utiliser setOnFocusChangeListener, il vérifiera quand le changement de focus

        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

Je préfère utiliser la liaison de liste ButterKnife , puis appliquer des actions sur la liste. Par exemple, avec le cas de EditTexts, j'ai les actions personnalisées suivantes définies dans une classe utilitaire (dans ce cas 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());
    }
};

Et dans le code de la vue, je lie les EditTexts à une liste et applique les actions lorsque j'ai besoin de vérifier les vues.

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

Et bien sûr, ce modèle est extensible pour vérifier n'importe quelle propriété sur un nombre quelconque de vues. Le seul inconvénient, si vous pouvez l'appeler ainsi, est la redondance des vues. Autrement dit, pour utiliser ces EditTexts, vous devez également les lier à des variables uniques afin de pouvoir les référencer par leur nom ou les référencer par position dans la liste ( edits.get(0), etc.). Personnellement, je lie simplement chacun d'eux deux fois, une fois à une seule variable et une fois à la liste et j'utilise celui qui est approprié.


0

Pour modifier le texte est vide, essayez un autre de cette manière simple:

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

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

pourquoi ignorer la casse?!
Tima

0

Essayez ceci: c'est à 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()
    }
}

Je vous remercie


0

Ce qui suit fonctionne pour moi tout en une seule déclaration:

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

D'abord, je récupère un texte de la EditText, puis le convertis en chaîne et enfin le compare avec la méthode ""using .equals.


0

cette fonction fonctionne pour moi

void privé 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();
            }
            }
            }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.