1

我是 Android 的初学者,我正在尝试构建一个简单的应用程序,将 EditTexts 一起添加。我找到了这个例子,但它对我不起作用。我收到一个错误(在代码的最后一行),指出“无法在原始双精度上调用 toString()”。

我做错了什么?

这是我的代码(就像示例一样):

公共类 MainActivity 扩展 Activity {

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());

}

}

4

2 回答 2

2

您不能在原语上调用 toString。请改用 String.valueOf(result)。

于 2013-07-22T16:23:53.013 回答
0

做这个resultsText.setText("" + result);

编辑:

崩溃的原因很简单。当您这样做 editableValue1 = editText1.getText();时,它将返回一个有效的可编辑内容,如果没有在编辑文本中输入任何内容,则其中的文本将是一个空字符串。因此,当您在其中一个编辑文本中输入数字时,相关的可编辑将返回正确的双精度值,但对于另一个编辑文本框(您尚未输入任何内容)将返回空字符串,因此您的函数calculateResult()将扔NumberFormatException。由于您没有捕获该异常,因此您的应用程序将崩溃。因此,长话短说,只需在调用时捕获异常calculateResult()

public void afterTextChanged(Editable s) {
    try {
        calculateResult();
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
}
于 2013-07-22T16:24:00.540 回答