Это код для проверки избранного, их добавления и удаления.
holder.favImageView.setOnClickListener{
val async = FavouriteDBAsyncTask(context.applicationContext,favouriteEntity,3).execute()
val result = async.get()
if(result)
{
// Restaurant is in favourites, so now removing it
val async = FavouriteDBAsyncTask(context.applicationContext,favouriteEntity,2).execute()
val result = async.get()
if(result){
println("Removed from favourites")
holder.favImageView.setImageResource(R.drawable.ic_baseline_favorite_border_24)
}else{
println("Not removed from Favourites")
holder.favImageView.setImageResource(R.drawable.ic_baseline_favorite_24)
}
}
else
{
// Restaurant is not in favourites, so now adding it
val async = FavouriteDBAsyncTask(context.applicationContext,favouriteEntity,1).execute()
val result = async.get()
if(result){
println("Added to favourites")
holder.favImageView.setImageResource(R.drawable.ic_baseline_favorite_24)
}else{
println("Not added to Favourites")
holder.favImageView.setImageResource(R.drawable.ic_baseline_favorite_border_24)
}
}
}
Элементы ищутся и добавляются соответственно. Но есть некоторая проблема с операцией удаления. Когда я удаляю элемент, выводится сообщение «Удалено из избранного», но элемент не удаляется из избранного. Список избранного печатаю фрагментом. И там элемент появляется даже после его удаления.
Это моя сущность: @Entity (tableName = "избранное")
data class FavouriteEntity(
@PrimaryKey(autoGenerate = true)
val id : Int = 0 ,
@ColumnInfo(name = "user_id") var userId : String,
@ColumnInfo(name = "fav_restaurant_id") var favouriteRestaurantId : String,
@ColumnInfo(name = "fav_restaurant_name") var favouriteRestaurantName : String,
@ColumnInfo(name = "fav_restaurant_img") var favouriteRestaurantImage : String,
@ColumnInfo(name = "fav_restaurant_price") var favouriteRestaurantPrice : String,
@ColumnInfo(name = "fav_restaurant_rating") var favouriteRestaurantRating : String
)
Это мой Дао:
@Dao
interface FavouriteDao {
@Insert
fun insert(favouriteEntity: FavouriteEntity)
@Delete
fun delete(favouriteEntity: FavouriteEntity)
@Query(value = "SELECT * FROM favourites WHERE user_id= :userId")
fun getRestaurantsByUserId(userId : String) : List <FavouriteEntity>
@Query(value = "SELECT * FROM favourites WHERE fav_restaurant_id = :restaurantId AND user_id = :userId")
fun getRestaurantByRestaurantIdAndUserId(restaurantId : String,userId: String) : FavouriteEntity
}
Это моя БД:
@Database(entities = [FavouriteEntity::class], version = 1)
abstract class FavouriteDatabase : RoomDatabase(){
abstract fun favouriteDao() : FavouriteDao
}
Это мои классы для всех асинхронных c задач:
class FavouriteDBAsyncTask(val context: Context, val favouriteEntity: FavouriteEntity, val mode:Int):AsyncTask<Void,Void,Boolean>() {
/*
Mode 1 -> Insert restaurant in Favourites
Mode 2 -> Delete restaurant from Favourites
*/
val db = Room.databaseBuilder(context, FavouriteDatabase::class.java,"favourite_db").build()
override fun doInBackground(vararg params: Void?): Boolean {
when(mode)
{
1 -> {
// Add restaurants to Favourites
db.favouriteDao().insert(favouriteEntity)
db.close()
return true
}
2 -> {
// Remove restaurants from Favourites
db.favouriteDao().delete(favouriteEntity)
db.close()
return true
}
3->{
// Checking if the restaurant is in favourites
val favourite : FavouriteEntity? = db.favouriteDao().getRestaurantByRestaurantIdAndUserId(favouriteEntity.favouriteRestaurantId,favouriteEntity.userId)
db.close()
return favourite != null
}
}
return false
}
class RetrieveUserFavourites(val context: Context,val userId:String) : AsyncTask<Void,Void,List<FavouriteEntity>>(){
override fun doInBackground(vararg params: Void?): List<FavouriteEntity> {
val db = Room.databaseBuilder(context,FavouriteDatabase::class.java,"favourite_db").build()
return db.favouriteDao().getRestaurantsByUserId(userId)
}
}
Единственная проблема - удаление. Пожалуйста, помогите.