В вашем коде вы закрываете базу данных внутри цикла for
.
По этой причине ваш код выполнит первую итерацию, затем закроет базу данных, и поэтому следующие итерации завершатся неудачно из-за закрытое соединение с БД .
Вы должны переместить ваш dbHeloper.close();
вызов за пределы цикла.
В зависимости, вы можете переместить свою переменную за пределы цикла for, для лучшегоиспользование памяти.В шортах:
Шаг 1: закрыть базу данных после цикла цикла
for (int d=0; d < countIngredients; d++) {
View childViewIng = parentIngredientLayout.getChildAt(d);
EditText childTextViewI = childViewIng.findViewById(R.id.ingredientsField);
EditText childTextViewQ = childViewIng.findViewById(R.id.quantityField);
childIngredient = childTextViewI.getText().toString();
childQuantity = Integer.parseInt(childTextViewQ.getText().toString());
newIngredient = new Ingredient(childIngredient, childQuantity);
dbHelper.insertIngredient(newIngredient);
ingredients.add(newIngredient);
}
//move close method here, outside loop
dbHelper.close();
Шаг 2: оптимизировать переменные
//move variables here, or wherever you want
View childViewIng = null;
EditText childTextViewI = null;
EditText childTextViewQ = null;
for (int d=0; d < countIngredients; d++) {
//in this way you will create only 1 object, and reuse it every time
childViewIng = parentIngredientLayout.getChildAt(d);
childTextViewI = childViewIng.findViewById(R.id.ingredientsField);
childTextViewQ = childViewIng.findViewById(R.id.quantityField);
childIngredient = childTextViewI.getText().toString();
childQuantity = Integer.parseInt(childTextViewQ.getText().toString());
newIngredient = new Ingredient(childIngredient, childQuantity);
dbHelper.insertIngredient(newIngredient);
ingredients.add(newIngredient);
}
dbHelper.close();
Надеюсь, это поможет!