不能在原始double上调用toString()

时间:2013-07-22 16:20:33

标签: android double invoke tostring primitive

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

我做错了什么?

Heres My Code(就像例子):

公共类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());

}

}

2 个答案:

答案 0 :(得分:2)


您无法在基元上调用toString。改为使用String.valueOf(result)。

答案 1 :(得分:0)

执行此操作resultsText.setText("" + result);

修改

崩溃的原因很简单。当你在做的时候 editableValue1 = editText1.getText();它将返回一个有效的可编辑内容,如果没有在编辑文本中输入任何内容,则内部文本将为空字符串。因此,当您在其中一个编辑文本中输入数字时,关联的可编辑将返回正确的double值,但对于其他编辑文本框(您尚未输入任何内容)将返回空字符串,因此您的函数{ {1}}会抛出calculateResult()。由于您没有捕获该异常,您的应用程序将崩溃。因此,为了简化这个长篇故事,只需在调用NumberFormatException时捕获异常。

calculateResult()