Как сделать калькулятор за два занятия
Я сделал приложение, в котором пользователь выбирает тип пищи, вводит вес, а затем приложение рассчитывает калории. Эта калория затем перемещается в MainActivity (при нажатии кнопки "Сохранить"), где общее количество калорий будет отображаться за этот день.
Мне нужно приложение, чтобы взять все рассчитанные калории и добавить их к любым существующим значениям в основной деятельности. Я написал код ниже, однако приложение вылетает, когда я нажимаю кнопку "Сохранить" во время второго действия.
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 ответа
Вам следует проверить значение 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
}
Либо значение, либо приветствие имеет значение, которое не может быть преобразовано в int: "70.0Cal".
Так что уберите достаточное "Cal", и если вам приходится иметь дело с дробями, используйте double вместо int.
Глядя на трассировку короткого стека, я вижу, что вы анализируете 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;
}