使用Room构建时发生错误:kap发生异常:java.lang.IllegalArgumentException:无法将void转换为Element

时间:2018-08-12 13:57:21

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

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

  

[kapt]发生异常:java.lang.IllegalArgumentException:无法将void转换为Element

这是我的代码:

`{
        implementation ...        
        implementation 'com.google.firebase:firebase-core:15.0.2'
        implementation 'com.google.firebase:firebase-messaging:15.0.2'
    }`

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

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

如何解决此构建错误?

1 个答案:

答案 0 :(得分:4)

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

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