首页 > 解决方案 > Android Room Insert 不插入也不做任何事情

问题描述

我是安卓和房间的新手。我正在使用 Dagger Hilt 注入数据库,但是当我使用 Insert 方法时没有任何反应。

实体:


@Entity(tableName = "product_table")
@Parcelize
data class Product(

    @PrimaryKey
    @SerializedName("id")
    val id : String,
    @SerializedName("title")
    val title : String,
    @SerializedName("price")
    val price : String,
    @SerializedName("category")
    val category : String,
    @SerializedName("description")
    val description : String,
    @SerializedName("image")
    val image : String,

    val color : String,
    val size : String
): Parcelable

道:


@Dao
interface CartDao {

    @Query("SELECT * FROM product_table")
    fun get_all_carts(): LiveData<List<Product>>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert_item_to_cart(product: Product) : Long

    @Delete
    suspend fun delete_item_from_cart(product: Product)


    @Query("Delete FROM product_table")
    fun delete_all_cart()

}

数据库:


@Database(entities = [Product::class], version = 1)
abstract class ProductDatabase : RoomDatabase() {

    abstract fun productDao(): CartDao
}

匕首刀柄模组:


@Module
@InstallIn(SingletonComponent::class)
object MainActivityModule {

    // Retrofit code

    @Provides
    @Singleton
    fun provideDatabase(
        app: Application,
    ) = Room.databaseBuilder(
        app,
        ProductDatabase::class.java,
        "product_db").build()

    @Provides
    fun provideTaskDao(db: ProductDatabase) = db.productDao()


}

片段视图模型:


@HiltViewModel
class ProductViewModel @Inject constructor(
    private val productDao : CartDao
) : ViewModel() {

    init {

    }


    fun insert_item_to_cart(product: Product){
        viewModelScope.launch{
            productDao.insert_item_to_cart(product)
        }

    }
}

片段按钮 OnClickListener:

btn_add_to_cart.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {

                val num = viewModel.insert_item_to_cart(
                    args.productData.copy(
                        color = selected_color,
                        size = selected_size
                    )
                )
                Log.d(TAG, "Inserted : ${num}")

            }
        })

当我的 Insert 函数返回Long这将是插入产品的主键时,该日志应该返回该数字,但它根本没有返回任何内容。希望有人可以帮助我,感谢您的关注。

标签: androidandroid-roomdagger-hilt

解决方案


推荐阅读