2013-07-22 2 views
1

Я начинаю с Android, и я пытаюсь создать простое приложение, которое добавляет EditTexts вместе. Я нашел этот пример, но он не работает для меня. Я получаю сообщение об ошибке (в последней строке кода), в котором говорится: «Невозможно вызвать toString() для примитивного двойника».не может вызывать toString() на примитиве double

Что я натворил Неверно?

Heres мой код (только как пример):

общественный класс MainActivity расширяет активность {

private EditText editText1, editText2; 
private TextView resultsText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    editText1 = (EditText) findViewById(R.id.editText1); 
    editText2 = (EditText) findViewById(R.id.editText2); 

    resultsText = (TextView) findViewById(R.id.resultsText); 

    TextWatcher textWatcher = new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
      calculateResult(); 
     } 

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

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

    editText1.addTextChangedListener(textWatcher); 
    editText2.addTextChangedListener(textWatcher); 
} 

private void calculateResult() throws NumberFormatException { 

    Editable editableValue1 = editText1.getText(), 
      editableValue2 = editText2.getText(); 

      double value1 = 0.0, 
      value2 = 0.0, 
      result; 

    if (editableValue1 != null) 
     value1 = Double.parseDouble(editableValue1.toString()); 

    if (editableValue2 != null) 
     value1 = Double.parseDouble(editableValue2.toString()); 

    result = value1 * value2; 

    resultsText.setText(result.toString()); 

} 

}

ответ

0

ли это resultsText.setText("" + result);

EDIT:

Причина аварии проста. Когда вы делаете editableValue1 = editText1.getText();, он вернет действительное редактируемое, а текст внутри будет пустой строкой, если в текст редактирования ничего не было введено. Поэтому, когда вы вводите число в одном из текстов редактирования, связанное редактирование вернет правильное двойное значение, но для другого текстового поля редактирования (для которого вы еще ничего не ввели) вернет пустую строку, поэтому ваша функция calculateResult() будет кидать NumberFormatException. Поскольку вы не поймаете это исключение, ваше приложение выйдет из строя. Поэтому, чтобы сделать эту длинную историю коротким, просто поймайте исключение, когда вы звоните calculateResult().

public void afterTextChanged(Editable s) { 
    try { 
     calculateResult(); 
    } catch (NumberFormatException e) { 
     e.printStackTrace(); 
    } 
} 
+0

приложение открывается великолепно. но когда я пытаюсь добавить число в EditText, он сработает. Любые идеи Я также смотрю на другие идеи – user2607537

+0

все еще не работает? Где именно он рушится? Можете ли вы включить свой логарифм? – Rajeev

+0

он открывается хорошо. Но когда я пытаюсь ввести число, он падает. – user2607537

2

Вы не можете вызвать ToString на примитивы. Вместо этого используйте String.valueOf (result).

+0

приложение открывается великолепно. но когда я пытаюсь добавить число в EditText, он сработает. Есть идеи? – user2607537

+0

Я также ищу в других областях, чтобы исправить это, просто интересно, есть ли у вас идеи. – user2607537

+0

Использование Double.parseDouble, как это не здорово. Все, что в поле, которое не является двойным, вызовет исключение. Например, пробел, буквенный символ или даже пустая строка. – devlish