【问题标题】:Error when building with Room: kapt An exception occurred: java.lang.IllegalArgumentException: voidcannot be converted to an Element使用 Room 构建时出错:kapt 发生异常:java.lang.IllegalArgumentException:void 无法转换为元素
【发布时间】:2018-08-12 13:57:21
【问题描述】:

在构建使用 Room 库、用于依赖注入的 Dagger 和 Kotlin 的项目时,我遇到此错误:

[kapt] 发生异常:java.lang.IllegalArgumentException: voidcannot be convert to an Element

这是我的代码:

@Entity(tableName = "contacts_table")
data class Contact(@PrimaryKey var cid: Long,
          @ColumnInfo(name = "firstColor") var firstColor: String?,
          @ColumnInfo(name = "secondColor") var secondColor: String?,
          @ColumnInfo(name = "avatarUrl") var avatarUrl: String?,
          @ColumnInfo(name = "name") var name: String,
          @ColumnInfo(name = "nickname") var nickname: String)


@Dao
interface ContactsDao {

     @Insert(onConflict = REPLACE)
     fun insertContact(contact: Contact)

     @Query("delete from contacts_table where cid=:id")
     fun deleteContactById(id: Long)

     @Query("select * from contacts_table")
     fun getAllContacts() : List<Contact>
}


@Database(entities = [Contact::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
     abstract fun contactsDao()
}

以下是我如何使用 DAO 的示例:

contactsDao.insertContact(Contact(response.id, response.firstColor, response.secondColor, 
        null, response.name, response.nickname)) 

contactsDao.insertContact(Contact(response.id, null, null, response.avatarUrl, 
        response.name, response.nickname))

如何修复此构建错误?

【问题讨论】:

  • abstract fun contactsDao()更改为abstract fun contactsDao(): ContactsDao in AppDatabase

标签: kotlin android-room android-architecture-components kapt


【解决方案1】:

在您的AppDatabase 中,您必须指定contactsDao() 的返回类型。它必须是ContactsDao。因此,您的课程应如下所示:

@Database(entities = [Contact::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
     abstract fun contactsDao(): ContactsDao
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多