我在 Kapt Debug Kotlin 中遇到错误。我在 gradle 文件中更新了依赖项的版本。仍然面临这个问题

Posted

技术标签:

【中文标题】我在 Kapt Debug Kotlin 中遇到错误。我在 gradle 文件中更新了依赖项的版本。仍然面临这个问题【英文标题】:I am getting an error in Kapt Debug Kotlin. I have update versions of dependencies in gradle file. still facing this issue 【发布时间】:2021-12-31 19:56:33 【问题描述】:

我的应用程序运行顺利,但我现在收到此错误。。如何解决?我在某处看到了您的房间数据库、dao 和数据类。仍然无法弄清楚是什么问题。

错误显示此文件 房间数据库

@Database(entities = [Transaction::class], version = 1, exportSchema = false)
abstract class MoneyDatabase : RoomDatabase()

    abstract fun transactionListDao():transactionDetailDao
    companion object 
        // Singleton prevents multiple instances of database opening at the
        // same time.
        @Volatile
        private var INSTANCE: MoneyDatabase? = null

        fun getDatabase(context: Context): MoneyDatabase 
            // if the INSTANCE is not null, then return it,
            // if it is, then create the database
            return INSTANCE ?: synchronized(this) 
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    MoneyDatabase::class.java,
                    "transaction_database"
                ).build()
                INSTANCE = instance
                // return instance
                instance
            
        
    

DAO

@Dao
interface transactionDetailDao 
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(transaction : Transaction)

    @Delete
    suspend fun delete(transaction : Transaction)

    @Update
    suspend fun update(transaction: Transaction)

    @Query("SELECT * FROM transaction_table ORDER BY id ASC")
    fun getalltransaction(): LiveData<List<Transaction>>

数据类

enum class Transaction_type()
    Cash , debit , Credit

enum class Type()
    Income, Expense

@Entity(tableName = "transaction_table")
data class Transaction(
    val name : String,
    val amount : Float,
    val day : Int,
    val month : Int,
    val year : Int,
    val comment: String,
    val datePicker: String,
    val transaction_type : String,
    val category : String,
    val recurring_from : String,
    val recurring_to : String
)
    @PrimaryKey(autoGenerate = true) var id :Long=0

【问题讨论】:

【参考方案1】:

错误已解决。我使用的是 kotlin 版本 1.6.0。我将其减少到 1.4.32。据我了解,上述(最新)版本的 Kotlin 以及 Room 和协程都不能很好地工作。

【讨论】:

【参考方案2】:

我认为您的问题是由于无意中使用了不正确的类,一个可能的罪魁祸首是 Transaction 因为它也是一个 Room 类

也许在 transactionDetailDao 中(虽然它可能在其他地方)

看看你有没有import androidx.room.Transaction? (或任何其他带有 Transaction 的导入)?

如果是这样,删除或注释掉导入

以和为例:-

并且将导入注释掉:-

从 github 导入,有一个播放问题,肯定是协程。注释掉了 Dao 中的暂停:-

@Dao
interface transactionDetailDao 
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(transaction : Transaction)

    @Delete
    suspend fun delete(transaction : Transaction)

    @Update
    suspend fun update(transaction: Transaction)

    @Query("SELECT * FROM transaction_table ORDER BY id ASC")
    fun getalltransaction(): LiveData<List<Transaction>>

编译成功并运行并进行了播放,例如:-

【讨论】:

以上是关于我在 Kapt Debug Kotlin 中遇到错误。我在 gradle 文件中更新了依赖项的版本。仍然面临这个问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行(使用 kotlinc)使用 kapt?

使用 kapt 和 gradle 时无法调试注释处理器

带有 Java 和 Kotlin 文件、kapt 或 annotationProcessor 的 Android 项目?

maven 支持 kapt 吗?

在Kotlin中使用注释处理Android框架 kapt

更改 KAPT 类生成路径