dao 插入中的类型不匹配 - 如何将对象列表转换为实体

Type mismatch in dao insert - how to convert list of object to entity

在我的 Kotlin 应用程序中,我使用 Retrofit 从网络和房间检索数据以在本地存储这些数据。

ViewmMdel 中,我想获取 asteroid 对象并将它们存储在本地数据库中。 主要问题是网络调用 returns ArrayList of data class called Asteroid Dao 需要 ArrayListAsteroid 实体。

所以基本上我有 2 颗小行星 classes。一个代表房间的实体,另一个代表网络调用的模型。

我在ViewModel

中有这个功能
private fun getAsteroids() {
    viewModelScope.launch {
        try {
            var result = repository.getAsteroid()
            _asteroidList.value = result.toMutableList()
            appLocalDb.asteroidDao.insertFeed(result)
           
        } catch (e : Exception) {
            _asteroidList.value = null
        }
    }

}

此处 getAsteroids 存储库

   override suspend fun getAsteroid(): ArrayList<Asteroid> {
        return apiRepositoryImp.getAsteroids();
    }

insertFeed道中

@Dao
interface AsteroidDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertFeed(vararg asteroid: Asteroid)
}

这是错误

Required:
com.asteroidradar.repository.db.entity.Asteroid
Found:
kotlin.collections.ArrayList<com.asteroidradar.Asteroid> /* = java.util.ArrayList<com.asteroidradar.Asteroid> */

您必须通过以下代码转换 com.asteroidradar.repository.db.entity.Asteroid com.asteroidradar.Asteroid:

 var result = repository.getAsteroid()
 _asteroidList.value = result.toMutableList()
 appLocalDb.asteroidDao.insertFeed(*result.map{ repoAsteroid ->
    com.asteroidradar.Asteroid(
      //Set full properties here
    )
 }.toTypedArray())

参见 Kotlin documentation: