не может вызывать toString() для примитивного двойника

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

Что я сделал не так?

Вот мой код (как в примере):

открытый класс 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());

}

}


person wwarren07    schedule 22.07.2013    source источник


Ответы (2)


Сделайте это resultsText.setText("" + result);

ИЗМЕНИТЬ:

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

public void afterTextChanged(Editable s) {
    try {
        calculateResult();
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
}
person Rajeev    schedule 22.07.2013
comment
приложение открывается отлично. но когда я пытаюсь добавить число в EditText, происходит сбой. Любые идеиЯ также рассматриваю другие идеи - person wwarren07; 22.07.2013
comment
это все еще не работает? Где именно вылетает? Можете ли вы включить свой логарифм? - person Rajeev; 22.07.2013
comment
открывается нормально. Но когда я пытаюсь ввести номер, он вылетает. - person wwarren07; 22.07.2013
comment
Logcat: 07-09 21:54:34.717: E/AndroidRuntime(573): в java.lang.Double.parseDouble(Double.java:318) 07-09 21:54:34.717: E/AndroidRuntime(573): в com.example.calculation.MainActivity.calculateResult(MainActivity.java:60) 07-09 21:54:34.717: E/AndroidRuntime(573): в com.example.calculation.MainActivity.access$0(MainActivity.java:47) 07-09 21:54:34.717: E/AndroidRuntime(573): в com.example.calculation.MainActivity$1.afterTextChanged(MainActivity.java:31) 07-09 21:54:34.717: E/AndroidRuntime(573): в android.widget.TextView.sendAfterTextChanged(TextView.java:6309) - person wwarren07; 22.07.2013
comment
Великолепно... Большое спасибо за уделенное время :-) - person wwarren07; 22.07.2013


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

person devlish    schedule 22.07.2013
comment
приложение открывается отлично. но когда я пытаюсь добавить число в EditText, происходит сбой. Есть идеи? - person wwarren07; 22.07.2013
comment
Я также ищу другие области, чтобы исправить это, просто интересно, есть ли у вас идеи. - person wwarren07; 22.07.2013
comment
Использование Double.parseDouble не очень хорошо. Все, что в поле не является двойным, вызовет исключение. Например, пробел, буквенно-цифровой символ или даже пустая строка. - person devlish; 22.07.2013