实现Room Android时的java.lang.reflect.InvocationTargetException
我得到这个错误:实现Room Android时的java.lang.reflect.InvocationTargetException,android,android-room,android-reflection,Android,Android Room,Android Reflection,我得到这个错误: @Database(entities = [MyStuff::class], version = 1, exportSchema = false) abstract class MyDatabase : RoomDatabase() { abstract fun myStuffDao(): MyStuffDao companion object { const val DB_NAME = "MyDatabase.db" priv
@Database(entities = [MyStuff::class], version = 1, exportSchema = false)
abstract class MyDatabase : RoomDatabase() {
abstract fun myStuffDao(): MyStuffDao
companion object {
const val DB_NAME = "MyDatabase.db"
private var INSTANCE: MyDatabase? = null
fun getMyDatabase(context: Context?): MyDatabase? {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(
context!!,
MyDatabase::class.java,
DB_NAME
).build()
}
return INSTANCE
}
fun destroyInstance() {
INSTANCE = null
}
}
}
我更改了gradle,但它们都不起作用。您不能使用自定义参数声明
@Insert
或@Delete
,它应该采用实体,而不是那样
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
您可以查看更多详细信息
Insert方法的所有参数必须是用实体或其集合/数组注释的类
我也有同样的例外。在我的例子中,这是因为我忘记将@Entity添加到我的一个模型类中,例如
@Insert
fun insertMyStuff(entity: MyStuff)
@Delete
fun deleteMyStuffName(entity: MyStuff)
@Delete
fun deleteMyStuff(entity: MyStuff)
你确定吗?那么,如果我想删除一行只有名字怎么办?当然,你可以在这里检查。但当删除并传递id时,您可以创建虚拟对象,只要您使用@Query(“从mystuff中删除,其中name:=:name”)就可以了,正如您看到的我的问题一样,我有那个注释。我不是指你的密码。
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
@Insert
fun insertMyStuff(entity: MyStuff)
@Delete
fun deleteMyStuffName(entity: MyStuff)
@Delete
fun deleteMyStuff(entity: MyStuff)
@Entity
data class Category(
...
...