2012-07-03 14 views
21

Desarrollé una aplicación simple, como sustracción, adición. En esta aplicación utilizo tres EditTexts, uno para la respuesta y otros dos para la pregunta. Quiero calcular la respuesta de la pregunta sobre el evento de cambio de texto. Pero cuando aplico el evento de cambio de texto en ambos casos, el evento ocurre pero no funciona correctamente. Porque cuando entro en el texto en primera pregunta EditarTexto de ocurrir el evento, pero se lanza esta excepción:Cómo aplicar el evento Textchange en EditText

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

¿Qué hago? Uso el TextWatcher para el evento de cambio de texto.

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

Respuesta

37

creo que está recibiendo cadena vacía " " que está causando este problema. Asegúrese de obtener un String no vacío de su Edittext.

Considere que su Edittext no tiene ningún valor ingresado, y está tratando de obtener su valor y convertirlo a int, se encontrará con este tipo de 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) { 

    } 
}); 

También puedes ver este enlace para obtener más idea,

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

+0

probar este - si, ya que estamos recibiendo CharSequence – Venky

+0

uso StringUtils.isEmpty en lugar de s.equals ("") (s.equals ('')!). Mucho más eficiente. – MrWizard54

0

Creo que se necesita para comprobar su valor EDITTEXT está vacía o no en primer lugar. Algo como esto:

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

Espero que sea de ayuda.

+0

¿Qué dice el gato de registro? –

1

He utilizado este y es correcta:

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

} 
+0

no se ve diferente de la otra respuesta, lo hace ;-) Y aún arrojará una ParseException si el contenido del campo no es ... analizable. – kleopatra

1

Creo que lo mejor en el caso del tipo EditarTexto es el número ... usan la (función de la longitud) del parámetro en lugar de (función equle()) por ejemplo:

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

    } 
}); 
Cuestiones relacionadas