Как применить событие Textchange к EditText

Я разработал одно простое приложение, такие как вычитание, сложение. В этом приложении я использую три EditTexts, один для ответа и два других для вопроса. Я хочу рассчитать ответ на вопрос о событии изменения текста. Но когда я применяю событие изменения текста на обоих из них, событие происходит, но не работает должным образом. Потому что, когда я вхожу в текст в первом EditText вопроса, событие происходит, но оно вызывает это исключение:

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

что мне делать? Я использую TextWatcher для изменения текста событие.

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

4 ответов


Я думаю, что вы получаете пустую строку " " что вызывает эту проблему. Убедитесь, что вы получаете непустую строку из вашего EditText.

рассмотреть ваши EditText не имеет значения набирается, и вы пытаетесь получить его значение и преобразовать в int вы столкнетесь с этой проблемой.

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

    }
});

также проверьте эту ссылку для получения дополнительной идеи,

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


я использовал это, и это правильно:

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

}

Я думаю, что лучше всего, если тип edittext-это число... используйте (функцию длины) параметра вместо функции (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) {

    }
});

Я думаю,вам нужно проверить, что ваше значение editText пусто или нет. Что-то вроде этого:--2-->

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

надеюсь, это поможет.