Удален элемент из базы данных комнат, перезагрузка после перезапуска приложения.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Удален элемент из базы данных комнат, перезагрузка после перезапуска приложения.

Сообщение Anonymous »

Итак, у меня есть представление 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • База данных комнат теряет данные при приложении перезапуска
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как хранить файлы базы данных комнат в проекте Android Studio?
    Anonymous » » в форуме Android
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Почему функции из моего репозитория не могут получить доступ к данным из базы данных моих комнат?
    Anonymous » » в форуме Android
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Синхронизация обновлений базы данных комнат между фрагментами в Android
    Anonymous » » в форуме Android
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Предварительное заполнение базы данных комнат с помощью Hilt
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»