【发布时间】:2020-08-25 18:48:35
【问题描述】:
我有自定义对象的列表,我想将其保存在数据库中。
所以我必须使用 TypeConverters 来实现这一点。
我的问题是我在实现功能时遇到错误并注意到
从未使用过使用 TypeConverter 注释的函数
这是错误:
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
error: The columns returned by the query does not have the fields [avatar,email,first_name,id,last_name] in com.hraa.fakeusers.model.UserData even though they are annotated as non-null or primitive. Columns returned by the query: [data]
public abstract androidx.lifecycle.LiveData<java.util.List<com.hraa.fakeusers.model.UserData>> getUsers();
这是代码:
@Entity(tableName = USER_DATA_TABLE)
data class DataModel(
val data: List<UserData>,
val page: Int,
val per_page: Int,
val total: Int,
val total_pages: Int
) {
@PrimaryKey(autoGenerate = true)
var id: Int? = null
}
data class UserData(
val avatar: String,
val email: String,
val first_name: String,
val id: Int,
val last_name: String
)
class Converters {
@TypeConverter
fun toUsersData(value: String): List<UserData> {
val type = object : TypeToken<List<UserData>>() {}.type
return Gson().fromJson(value, type)
}
@TypeConverter
fun fromUsersData(usersData: List<UserData>): String {
return Gson().toJson(usersData)
}
}
@Database(entities = [DataModel::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class AppDatabase: RoomDatabase() {
abstract fun dataDao(): DataDao
}
@Dao
interface DataDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertData(data: DataModel)
@Delete
suspend fun deleteData(data: DataModel)
@Query("SELECT data FROM USER_DATA_TABLE")
fun getUsers(): LiveData<List<UserData>>
}
注意:toUsersData() 函数从未使用过。我不知道为什么。
【问题讨论】:
标签: android android-studio android-room