Почему запрос на удаление не удаляет мои записи при использовании комнаты в android? - PullRequest
1 голос
/ 14 июля 2020

Это код для проверки избранного, их добавления и удаления.

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)
    }
}

Единственная проблема - удаление. Пожалуйста, помогите.

...