【问题标题】:Android studio kotlin error : Execution failed for task ':app:kaptDebugKotlin'Android studio kotlin 错误:任务“:app:kaptDebugKotlin”执行失败
【发布时间】:2021-07-22 13:59:32
【问题描述】:

我正在尝试为联赛数据实现房间数据库,但是当我尝试编译时,它不起作用。该错误似乎是在数据库文件中引发的。我希望你能帮助我

在 Dao 中,我选择所有 countryProperty 并将它们插入数据库中,

@Dao
interface CountryDataBaseDao {
   @Query("SELECT * FROM DatabaseCountryProperty")
   fun getData() : LiveData<List<DatabaseCountryProperty>>

   @Insert(onConflict = OnConflictStrategy.REPLACE)
   fun insertData(data : List<DatabaseCountryProperty>)
}

在实体中,countryProperty 实体获取额外的实体,

@Entity
data class DatabaseCountryProperty constructor(
    @PrimaryKey
      val id: String,
      val name: String,
      val imagePath: String?,
      val extra: DatabaseExtraCountry?)


    data class DatabaseExtraCountry constructor(
      val continent : String?,
      val subRegion : String?,
      val worldRegion : String?,
      val fifa : String?,
      val iso : String?,
      val iso2 : String?,
      val longitude : Double?,
      val latitude : Double?,
      val flag : String?) {
}

fun List<DatabaseCountryProperty>.asDomainModel() : List<DevByteCountryProperty> {
    return map {
            DevByteCountryProperty(
                    id = it.id,
                    name = it.name,
                    imagePath = it.imagePath,
                    extra = DevByteExtraCountry(
                            continent = it.extra?.continent,
                            subRegion = it.extra?.subRegion,
                            worldRegion = it.extra?.worldRegion,
                            fifa = it.extra?.fifa,
                            iso = it.extra?.iso,
                            iso2 = it.extra?.iso2,
                            longitude = it.extra?.longitude,
                            latitude = it.extra?.latitude,
                            flag = it.extra?.flag
                    )
            )
    }
}

在数据库中,

@Database(entities = [DatabaseCountryProperty::class], version = 1, exportSchema = false)
   abstract class DataDataBase : RoomDatabase() {
      abstract val countryDataBaseDao : CountryDataBaseDao

   }

    private lateinit var INSTANCE: DataDataBase

    fun getDatabase(context: Context): DataDataBase {
     synchronized(DataDataBase::class.java) {
       if (!::INSTANCE.isInitialized) {
           INSTANCE = Room.databaseBuilder(context.applicationContext,
                   DataDataBase::class.java,
                   "data").build()
       }
     }
     return INSTANCE
   }

【问题讨论】:

    标签: kotlin android-room


    【解决方案1】:

    错误是我没有嵌入注释来声明额外是子类的事实。所以代码是,

    @Entity
    data class DatabaseCountryProperty constructor(
      @PrimaryKey
      val id: String,
      val name: String,
      val imagePath: String?,
      @Embedded
      val extra: DatabaseExtraCountry?)
    
    
    data class DatabaseExtraCountry constructor(
      val continent : String?,
      val subRegion : String?,
      val worldRegion : String?,
      val fifa : String?,
      val iso : String?,
      val iso2 : String?,
      val longitude : Double?,
      val latitude : Double?,
      val flag : String?) {
    

    }

    【讨论】:

    • 天才!谢谢为我节省了一些时间来解决错误的问题。它在 XML 代码中的 Stateflow 视图模型上对我来说出错了......就是这样。
    • 很高兴能帮到你!
    【解决方案2】:

    将这些添加到您的构建 gradle 中。

    1. 在您的插件中添加 'kotlin-kapt'

    2.   kapt "androidx.room:room-compiler:2.3.0"  in your dependencies
      

    试一试

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2016-02-09
      • 2018-04-30
      • 1970-01-01
      相关资源
      最近更新 更多