我是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());
}
}
答案 0 :(得分:2)
您无法在基元上调用toString。改为使用String.valueOf(result)。
答案 1 :(得分:0)
执行此操作resultsText.setText("" + result);
修改强>
崩溃的原因很简单。当你在做的时候
editableValue1 = editText1.getText();
它将返回一个有效的可编辑内容,如果没有在编辑文本中输入任何内容,则内部文本将为空字符串。因此,当您在其中一个编辑文本中输入数字时,关联的可编辑将返回正确的double值,但对于其他编辑文本框(您尚未输入任何内容)将返回空字符串,因此您的函数{ {1}}会抛出calculateResult()
。由于您没有捕获该异常,您的应用程序将崩溃。因此,为了简化这个长篇故事,只需在调用NumberFormatException
时捕获异常。
calculateResult()