2012-07-03 23 views
21

Ho sviluppato una semplice app, come sottrazione, aggiunta. In questa app uso tre EditTexts, uno per la risposta e altri due per la domanda. Voglio calcolare la risposta della domanda sull'evento di modifica del testo. Ma quando applico l'evento di modifica del testo su entrambi, l'evento si verifica ma non funziona correttamente. Perché quando entro nel testo in prima EditText della domanda l'evento si verifica, ma genera questa eccezione:Come applicare l'evento Textchange su EditText

07-03 16:39:48.844: E/EduApp Log :=>(12537): Error In Text change Event java.lang.NumberFormatException: unable to parse '' as integer 

Cosa devo fare? Io uso lo TextWatcher per l'evento di modifica del testo.

txtOne.addTextChangedListener(this); 
txtTwo.addTextChangedListener(this); 

public void afterTextChanged(Editable s) {} 

public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

public void onTextChanged(CharSequence s, int start, int before, int count) {} 

risposta

37

penso che si sta ricevendo stringa vuota " " che sta causando il problema. Assicurati di ottenere una stringa non vuota dal tuo Edittext.

Considerate che il vostro Edittext non ha alcun valore digitato, e state cercando di ottenere il suo valore e convertirlo in int vi imbatterete in questo tipo di problema.

edittext.addTextChangedListener(new TextWatcher() { 

    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
     if(!s.equals("")) 
       { //do your work here } 
     } 

    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 

    } 

    public void afterTextChanged(Editable s) { 

    } 
}); 

controllare anche questo link per maggiori idea,

https://stackoverflow.com/a/3377648/603744

+0

Prova questa - se, Dal momento che stiamo ottenendo CharSequence – Venky

+0

Usa StringUtils.isEmpty piuttosto che s.equals ("") (s.equals ('')!). Molto più efficiente. – MrWizard54

0

Credo che avete bisogno di controllare il vostro valore EditText è vuota o non prima. Qualcosa del genere:

String textValue; 
textValue = edittext().getText().toString()); 
Log.v("","Value is " + textValue); 
if(textValue != ""){ 
    // Call Text Change Listener Here 
}else{ 
    // Throw error message or something 
} 

Spero sia di aiuto.

+0

cosa dice il gatto del registro? –

1

ho usato questo ed è corretto:

public void afterTextChanged(Editable arg0) { 
    String inputs = input.getText().toString(); 
    Integer index=0; 
    if(!inputs.equals("")) 
     index=Integer.valueOf(inputs); 

} 
+0

non sembra diverso dall'altra risposta, lo fa ;-) E getterà ancora una ParseException se il contenuto del campo non è ... parseable. – kleopatra

1

penso che il migliore nel caso in cui il tipo EditText è il numero ... utilizzare la (funzione di lunghezza) del parametro invece di (funzione equle()) es:

edittext.addTextChangedListener(new TextWatcher() { 

    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
     if (s.length() > 0) 
       { //do your work here } 
     } 

    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 

    } 

    public void afterTextChanged(Editable s) { 

    } 
}); 
Problemi correlati