我制作了一个应用程序,用户选择食物类型,输入重量,然后应用程序计算卡路里。然后将此卡路里移至MainActivity(当按下' Save'按钮时),其中将显示当天的总卡路里。
我需要应用程序计算所有卡路里,并将它们添加到主要活动的任何现有值上。我编写了下面的代码,但是当我按下第二个活动的保存按钮时,应用程序崩溃了。
String greeting = getIntent().getStringExtra("Greeting Message");
EditText editText1 = (EditText)findViewById(R.id.editText1);
String value = editText1.getText().toString();
Integer aValue = (value != null && !value.isEmpty()) ? Integer.parseInt(value) : 0 ;
Integer bValue = (greeting != null && !greeting.isEmpty()) ? count +=Integer.parseInt(greeting) : 0 ;
editText1.setText(count + "");
堆叠错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nicola.student.mealtracker/com.nicola.student.mealtracker.MainActivity}: java.lang.NumberFormatException: Invalid int: "70.0Cal"
答案 0 :(得分:1)
值或问候语的值无法转换为int:“70.0Cal”。
因此,删除足够的“Cal”,如果必须处理分数,请使用double而不是int。
答案 1 :(得分:1)
你应该检查你的值String,你的异常告诉我String是“70.0Cal”。首先,你可以得到一个子串,如果你知道最后三个标志总是“Cal”
String value = value.substring(0,substring.length()-3);
和第二,你有一个小数值,所以你应该使用不是整数,你应该使用Float或double。
另外,您应该检查EditText中的文本是否为空或空:
String edittextText = editText1.getText().toString();
if(edittextText!=null && !edittextText.equals("")){
//start calculating
}
答案 2 :(得分:1)
查看提供的短堆栈跟踪,我可以看到您正在解析的String
值不是正确的Integer
格式。
您必须对该字段进行一些验证,以确保提供的输入是有效的数值。您可以使用以下方法或通过设置EditText inputType android:inputType="number"
/**
* Checks if the text is a valid numeric value
* @param value
* @return valid
*/
public static boolean isNumeric(String value) {
if (!isNull(value)) {
if (value.matches("[-+]?\\d*\\.?\\d+")) {
return true;
}
}
return false;
}
我建议不要将Cal附加到返回的值。保持输入数字。而是添加" Cal"您TextView
旁边EditText
的值。
通过使用isNumeric
方法在解析之前检查值来以这种方式实现它。
public void executeYourCode() {
//Parse your values to Double
//as you are using Double values
Double aValue = getCheckedValue(value) ;
Double bValue = getCheckedValue(greeting);
count+= bValue;
editText1.setText(String.valueOf(count));
}
public int getCheckedValue(String value) {
if (value != null && !value.isEmpty() && isNumeric(value)) {
return Double.parseDouble(value.trim());
}
return 0;
}