2012-07-03 12 views
21

Opracowałem jedną prostą aplikację, np. Odejmowanie, dodawanie. W tej aplikacji używam trzech EditTexts, jednego do odpowiedzi i dwóch pozostałych do pytania. Chcę obliczyć odpowiedź na pytanie o zmianę tekstu zdarzenia. Ale gdy zastosuję zdarzenie zmiany tekstu w obu tych zdarzeniach, zdarzenie wystąpi, ale nie działa poprawnie. Bo kiedy ja wchodzę w tekście w pierwszej EditText pytania zdarzenie występuje, ale rzuca ten wyjątek:Jak zastosować zdarzenie Textchange w EditText

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

co mam zrobić? Używam TextWatcher do zmiany tekstu zdarzenia.

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

Odpowiedz

37

Myślę, że otrzymujesz pusty ciąg " ", który powoduje ten problem. Upewnij się, że otrzymałeś niepusty ciąg z edytora Edittext.

Należy wziąć pod uwagę, że Edittext nie ma wpisanej żadnej wartości, a próbujesz uzyskać jego wartość i przekształcić ją w int, w której napotkasz taki problem.

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

    } 
}); 

również sprawdzić ten link, aby uzyskać więcej idei,

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

+0

Spróbuj tego - jeśli Ponieważ jesteśmy coraz CharSequence – Venky

+0

Używaj StringUtils.isEmpty zamiast s.equals ("") (s.equals ('')!). O wiele bardziej wydajny. – MrWizard54

0

myślę, że trzeba by sprawdzić wartość EditText jest pusta lub nie w pierwszej kolejności. Coś takiego:

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

nadzieję, że to pomaga.

+0

co oznacza dziennik? –

1

użyłem tego i to jest poprawne:

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

} 
+0

nie wygląda inaczej niż druga odpowiedź, robi to ;-) I nadal będzie generował wyjątek ParseException, jeśli zawartość pola nie jest ... parsowana. – kleopatra

1

myślę, że najlepiej w przypadku, gdy typ EditText jest numer ... użyć funkcji (długość) parametru zamiast (funkcja equle()) ex:

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

    } 
});