Controlla se EditText è vuoto. [chiuso]


218

Ho 5 EditTextsin Android per gli utenti di input. Vorrei sapere se potrei avere un metodo per controllare tutti e 5 EditTextsse sono nulli. C'è un modo per fare questo??

Risposte:


367

Ho fatto una cosa del genere una volta;

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
si scusa, ho dimenticato di averne cinque. Potresti creare una funzione che ha fatto la stessa cosa e chiamarla cinque volte, oppure puoi passare in rassegna i cinque EditText.
cvaldemar,

43
Mi dispiace essere pedante, ma non scrivi funzioni in Java, sono chiamati metodi ...
WiZarD

1
se EditText.setInputType (InputType.TYPE_CLASS_NUMBER); numero che non funziona
Zala Janaksinh,

64
lo stai rendendo tutto più difficile di quanto debba essere: TextUtils.isEmpty (editText.getText ());
martyglaubitz,

4
Di solito uso 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;
}

O secondo Audrius

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

Se la funzione return falsesignifica edittext è not emptye return truesignifica edittext è empty...


29
+1 Controllare la lunghezza è meglio che controllare la stringa vuota IMHO. Aiuterebbe a tagliare la stringa prima di controllare la lunghezza in modo che i caratteri degli spazi bianchi non vengano conteggiati. A proposito, qualche motivo particolare di non usare al return etText.getText().toString().trim().length() == 0posto dei rami vero / falso?
Audrius,

1
bene immagino che la leggibilità e la manutenibilità del codice ...
WiZarD

se EditText.setInputType (InputType.TYPE_CLASS_NUMBER); numero quindi utilizzare questo.
Zala Janaksinh,

Sì, funziona perché dipende dalla lunghezza ...
SBJ

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

145

Per convalidare EditText usa il metodo EditText # setError per mostrare l'errore e per controllare il valore vuoto o nullo usa la classe Android integrata TextUtils.isEmpty (strVar) che restituisce vero se strVar è nullo o di lunghezza zero

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

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

Immagine tratta dalla ricerca di Google


dovresti aggiungerne un altro )nell'istruzione if.
ʍѳђ ઽ ૯ ท

1
@Androidenthusiasts grazie per averlo segnalato il mio errore di errore, ho aggiornato la mia risposta :)
MilapTank

Impossibile capire il secondo campo "" usernameEditText "" "String strUserName = usernameEditText.getText (). ToString ();" dove viene dichiarato?
Sam,

@Sam è il mio errore di battitura ho aggiornato la mia risposta usernameEditTextè EditTextoggetto e ora è stato rinominato in etUserName
MilapTank

1
.toString();non è richiesto
MariuszS

36

prova questo :

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

o usa la classe TextUtils in questo modo:

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

3
... questo è il modo migliore per farlo. Altri esempi consentono input che non vengono considerati.
dell116,

29

Qui fino a tardi alla festa, ma devo solo aggiungere TextUtils.isEmpty (CharSequence str) di Android

Restituisce vero se la stringa è null o lunghezza 0

Quindi se metti i tuoi cinque EditTexts in un elenco, il codice completo sarebbe:

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

isEmpty () non verifica la presenza di spazi vuoti, prova a inserire uno spazio
Caccia il

3
@Hunt È vero, ma non sarebbe più vuoto o nullo. Forse TextUtils.isEmpty (sUserName.trim ()) sarebbe appropriato, per rimuovere tutti gli spazi vuoti, nel caso in cui l'utente abbia inserito uno o più spazi vuoti?
Qw4z1

isEmpty()prende un CharSequence, che si Editableestende, quindi non c'è bisogno di chiamarlo .toString().
karl,

@karl Ottimo punto! Aggiornato la mia risposta.
Qw4z1,

19

Altre risposte sono corrette ma fallo in breve

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


7

Perché non disabilitare semplicemente il pulsante se EditText è vuoto? IMHO Questo sembra più professionale:

        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

Puoi usare length()da EditText.

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

6

Di solito faccio ciò che SBJ propone, ma viceversa. Trovo semplicemente più facile capire il mio codice controllando i risultati positivi anziché i doppi negativi. Potresti chiedere come verificare la presenza di EdiTexts vuoti, ma ciò che vuoi veramente sapere è se ha qualche contenuto e non che non sia vuoto.

Così:

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

Come SBJ preferisco restituire "non ha contenuto" (o false) come impostazione predefinita per evitare eccezioni perché ho bloccato il mio controllo del contenuto. In questo modo sarai assolutamente certo che atrue sia stato "approvato" dai tuoi assegni.

Penso anche che la ifchiamata appaia un po 'più pulita:

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

Dipende molto dalle preferenze, ma lo trovo più facile da leggere. :)


4

Uso questo metodo, che usa trim()per evitare spazi vuoti:

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 esempio se hai diversi 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");
        }

puoi usare TextUtils.isEmpty come il mio esempio! In bocca al lupo


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

3

Ho usato TextUtilsper questo:

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

2

Puoi anche controllare tutte le stringhe EditText in una condizione If: in questo modo

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

2

Volevo fare qualcosa di simile. Ma ottenere il valore del testo da modificare il testo e confrontarlo come se (str=="")non funzionasse per me. Quindi l'opzione migliore era:

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

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

Ha funzionato come un fascino.


2

Prova questo usando le condizioni If ELSE If. Puoi validare facilmente i tuoi campi 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

È possibile chiamare questa funzione per ciascuno dei testi di modifica:

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

Vedrai il messaggio in LogCat ....


1

"guarda questo sono sicuro che ti piacerà."

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

con questo codice funzione è possibile eliminare lo spazio vuoto all'inizio e alla fine della stringa. Se la stringa è "" restituisce il messaggio "errore", altrimenti hai una stringa

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

Aggiungi una breve spiegazione del tuo codice.
Terru_theTerror

stackoverflow.com/questions/61766882/… puoi aiutarmi con il mio problema ??
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");

}

fare così per tutti e cinque i testi di modifica


0

È possibile utilizzare setOnFocusChangeListener, controllerà quando cambia la messa a fuoco

        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

Preferisco usare l' associazione dell'elenco ButterKnife e quindi applicare le azioni sull'elenco. Ad esempio, con il caso di EditTexts, ho le seguenti azioni personalizzate definite in una classe di utilità (in questo caso 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());
    }
};

E nel codice della vista, associo EditTexts a un elenco e applico le azioni quando devo controllare le viste.

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

E ovviamente questo modello è estendibile al controllo di qualsiasi proprietà su un numero qualsiasi di viste. L'unico aspetto negativo, se così si può chiamare, è la ridondanza delle viste. Significato, per usare questi EditTexts, dovresti legarli anche a singole variabili in modo da poterli fare riferimento per nome o dovresti fare riferimento a loro per posizione nell'elenco ( edits.get(0), ecc.). Personalmente, li rilevo solo due volte, una volta a una singola variabile e una volta a una lista e uso quello che è appropriato.


0

Per modificare Il testo è vuoto provane un altro in questo modo semplice:

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

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

perché ignorare il caso ?!
Tima,

0

Prova questo: è a 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()
    }
}

Grazie


0

Quanto segue funziona per me tutto in un'unica affermazione:

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

Per prima cosa recupero un testo dal EditTexte poi lo converto in una stringa e infine confrontandolo con il metodo ""using .equals.


0

questa funzione funziona per me

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();
            }
            }
            }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.