Сбой Android для динамического расчета, когда EditText пуст - PullRequest
1 голос
/ 22 февраля 2012

Я работаю над калькулятором дискового пространства, и мне нужно динамически вычислять некоторые значения в соответствии с пользовательским вводом. В моем приложении есть элемент EditText, который получает числа. Я хочу вызвать мою функцию Calculate (), которая будет автоматически вычислять другие значения, когда пользователь вводит значение в текстовое поле. Вот мой код для этого

//fps is my EditText element
this.fps.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)  
           {
    // TODO Auto-generated method stub
        calculate();
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
    // TODO Auto-generated method stub
    }
    @Override
    public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

    }
    });     

Моя функция Calculate () использует ввод текста, преобразует его в число с плавающей точкой и вычисляет другие значения, такие как пропускная способность. Это работает нормально, но проблема возникает, когда я хочу удалить все номера в EditText, чтобы добавить еще один. В тот момент, когда в editText ничего нет, это дает исключение. Что я понимаю, это потому, что нечего конвертировать в float, так что синтаксический анализ и т. Д. Я попытался поставить значение по умолчанию

if(fps.getText().length==0)
    fps.setText("1");

Но это не работает. Как я могу решить эту проблему?

Ответы [ 4 ]

4 голосов
/ 22 февраля 2012

Просто попробуйте окружить ваш calculate() блоком try / catch и поймать выброшенное исключение ..

try { 
  calculate();
} catch {NumberFormatException nfe) { //or whatever exception you get
      //do some handling if you need to
}
1 голос
/ 22 февраля 2012

Попытайтесь вызвать функцию Calculate () в onTextChanged (), если в вашем тексте редактирования есть хотя бы один символ, как этот.

if(fps.getText.length>0){
calculate();
}
1 голос
/ 22 февраля 2012

Попробуйте это:

this.fps.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

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

    }
    @Override
    public void afterTextChanged(Editable s) {

         if(!s.toString().trim().equals(""))
             calculate();
         else
             //do nothing here or show error
    }
}); 
0 голосов
/ 22 февраля 2012

Ваша операция в afterTextChanged

...