Итак, у меня есть представление recyclerview с несколькими предметами (блюдами), которые пользователь добавляет из диалогового окна оповещения. Когда я запускаю приложение и добавляю еду, немедленно удаляю ее и выхожу из приложения. При втором запуске только что добавленная еда загружается из базы данных и не удаляется, хотя так и должно быть. Когда я удаляю его во второй раз, когда он был добавлен ранее, он удаляется и больше не загружается.
Это мой AppDatabase.class:
@Database(entities = {FoodItem.class, FoodMenuItem.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract FoodItemDao foodItemDao();
public abstract FoodMenuItemDao foodMenuItemDao();
private static AppDatabase INSTANCE;
public static AppDatabase getInstance(Context context) {
if(INSTANCE == null){
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "DB_NAME")
.allowMainThreadQueries()
.build();
}
return INSTANCE;
}
}
Это мой класс FoodItem.
@Entity
public class FoodItem {
@PrimaryKey(autoGenerate = true)
public int id;
public String mealName;
public double kcal;
public double fats;
public double proteins;
public double carbs;
public String date;
public int quantity;
public FoodItem(String mealName, double kcal, double fats, double carbs, double proteins, String date) {
this.mealName = mealName;
this.kcal = kcal;
this.fats = fats;
this.carbs = carbs;
this.proteins = proteins;
this.date = date;
this.quantity = 100;
}
public int getId() {
return id;
}
public String getMealName() {
return mealName;
}
public double getKcal() {
return kcal;
}
public double getFats() {
return fats;
}
public double getProteins() {
return proteins;
}
public double getCarbs() {
return carbs;
}
public String getDate() {
return date;
}
public int getQuantity() {
return quantity;
}
public void setId(int id) {
this.id = id;
}
public void setMealName(String mealName) {
this.mealName = mealName;
}
public void setKcal(double kcal) {
this.kcal = kcal;
}
public void setFats(double fats) {
this.fats = fats;
}
public void setProteins(double proteins) {
this.proteins = proteins;
}
public void setCarbs(double carbs) {
this.carbs = carbs;
}
public void setDate(String date) {
this.date = date;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
Это несколько методов из класса MealAdapter.class:
public void addMeal(FoodItem meal) {
meals.add(meal);
notifyItemInserted(meals.size() - 1);
}
public List getMeals() {
return meals;
}
public MealAdapter(List meals) {
this.meals = meals;
}
public FoodItem getMealAt(int position) {
return meals.get(position);
}
public void removeMeal(FoodItem foodItem) {
int position = meals.indexOf(foodItem);
if (position != -1) {
meals.remove(position);
notifyItemRemoved(position);
}
}
Это мой FoodItemDao:
@Dao
public interface FoodItemDao {
@Insert
void insert(FoodItem foodItem);
@Query("SELECT * FROM FoodItem")
List getAllMeals();
@Query("SELECT * FROM FoodItem")
FoodItem getMeal();
@Delete
void delete(FoodItem foodItem);
@Query("SELECT * FROM FoodItem WHERE date = :date")
List getMealsByDate(String date);
@Query("DELETE FROM FoodItem WHERE date = :date")
void deleteMealsByDate(String date);
}
Это моя активность:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_macros_calculator);
db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "DB_NAME").allowMainThreadQueries().build();
foodMenuItemDao = db.foodMenuItemDao();
foodItemDao = db.foodItemDao();
List savedMeals = loadTodaysMealsFromDatabase();
for (FoodItem meal : savedMeals) {
mealAdapter.addMeal(meal);
}
updateTotalValues();
}
private List loadTodaysMealsFromDatabase() {
String currentDate = dateFormat.format(calendar.getTime());
List meals = foodItemDao.getMealsByDate(currentDate);
Log.d("Database", "Loaded meals: " + meals.size());
return meals;
}
private class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {
SwipeToDeleteCallback() {
super(0, ItemTouchHelper.LEFT);
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
FoodItem deletedMeal = mealAdapter.getMeals().get(position);
deleteItem(deletedMeal);
updateTotalValues();
}
}
private void deleteItem(FoodItem foodItem) {
AppDatabase database = AppDatabase.getInstance(this.getApplicationContext());
database.foodItemDao().delete(foodItem);
Log.d("Database", "Deleted meal: " + foodItem.getMealName());
mealAdapter.removeMeal(foodItem);
mealAdapter.notifyDataSetChanged();
updateTotalValues();
}
........
builder.setPositiveButton("Add", (dialog, which) -> {
int selectedQuantity = getSelectedQuantity(radioGroupQuantities);
FoodMenuItem selectedMeal = menuAdapter.getSelectedMeal();
if (selectedMeal != null && selectedQuantity > 0) {
String currentDate = dateFormat.format(calendar.getTime());
FoodItem mealToAdd = calculateMealForQuantity(selectedMeal, selectedQuantity);
mealToAdd.setDate(currentDate);
foodItemDao.insert(mealToAdd);
mealAdapter.addMeal(mealToAdd);
updateTotalValues();
}
private void updateTotalValues() {
List meals = mealAdapter.getMeals(); // Get the list of meals from the adapter
int totalKcal = 0;
double totalFats = 0;
double totalCarbs = 0;
double totalProteins = 0;
for (FoodItem meal : meals) {
totalKcal += meal.getKcal();
totalFats += meal.getFats();
totalCarbs += meal.getCarbs();
totalProteins += meal.getProteins();
}
// Update the TextView with the total values
txtViewTotal.setText("Total - " + totalKcal + "kcal " +
totalFats + "g fats " +
totalCarbs + "g carbs " +
totalProteins +"g proteins");
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... pp-restart
Удален элемент из базы данных комнат, перезагрузка после перезапуска приложения. ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Синхронизация обновлений базы данных комнат между фрагментами в Android
Anonymous » » в форуме Android - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-