如何在两个活动上制作计算器
How to make calculator over two activities
我制作了一个应用程序,用户可以在其中选择食物类型、输入重量,然后该应用程序会计算卡路里。然后将此卡路里移动到 MainActivity(当按下 'Save' 按钮时),其中将显示当天的总卡路里。
我需要该应用程序计算所有计算的卡路里并将它们添加到主 activity 上的任何现有值。我写了下面的代码,但是当我第二次按下保存按钮时,应用程序崩溃了 activity。
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"
value 或 greeting 具有无法转换为 int 的值:“70.0Cal”。
所以删除后缀 "Cal" ,如果你必须处理分数,请使用 double 而不是 int.
您应该检查您的值字符串,您的异常告诉我该字符串是“70.0Cal”。首先,如果您知道最后三个符号总是 "Cal"
,您可以获得一个子字符串
String value = value.substring(0,substring.length()-3);
其次,你有一个十进制值,所以你不应该使用整数,你应该使用浮点数或双精度数。
此外,您应该检查 EditText 中的文本是否不为 null 或为空:
String edittextText = editText1.getText().toString();
if(edittextText!=null && !edittextText.equals("")){
//start calculating
}
查看提供的短堆栈跟踪,我可以看到您正在解析一个 String
格式不正确的 Integer
值。
您必须对该字段进行一些验证,以确保提供的输入是有效的数值。您可以使用以下方法或设置 EditText 输入类型 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 附加到返回值。保留输入的数字。而是在 EditText
旁边的 TextView
中添加 "Cal" 值。
通过使用 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;
}
我制作了一个应用程序,用户可以在其中选择食物类型、输入重量,然后该应用程序会计算卡路里。然后将此卡路里移动到 MainActivity(当按下 'Save' 按钮时),其中将显示当天的总卡路里。
我需要该应用程序计算所有计算的卡路里并将它们添加到主 activity 上的任何现有值。我写了下面的代码,但是当我第二次按下保存按钮时,应用程序崩溃了 activity。
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"
value 或 greeting 具有无法转换为 int 的值:“70.0Cal”。
所以删除后缀 "Cal" ,如果你必须处理分数,请使用 double 而不是 int.
您应该检查您的值字符串,您的异常告诉我该字符串是“70.0Cal”。首先,如果您知道最后三个符号总是 "Cal"
,您可以获得一个子字符串 String value = value.substring(0,substring.length()-3);
其次,你有一个十进制值,所以你不应该使用整数,你应该使用浮点数或双精度数。
此外,您应该检查 EditText 中的文本是否不为 null 或为空:
String edittextText = editText1.getText().toString();
if(edittextText!=null && !edittextText.equals("")){
//start calculating
}
查看提供的短堆栈跟踪,我可以看到您正在解析一个 String
格式不正确的 Integer
值。
您必须对该字段进行一些验证,以确保提供的输入是有效的数值。您可以使用以下方法或设置 EditText 输入类型 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 附加到返回值。保留输入的数字。而是在 EditText
旁边的 TextView
中添加 "Cal" 值。
通过使用 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;
}