如何使计算器超过两个活动

时间:2015-03-02 11:24:07

标签: java android android-studio calculator

我制作了一个应用程序,用户选择食物类型,输入重量,然后应用程序计算卡路里。然后将此卡路里移至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"

3 个答案:

答案 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;
}