【发布时间】:2018-03-19 08:43:16
【问题描述】:
这是我的实体:
@Entity(tableName = "commits")
data class Commit(
@PrimaryKey
@ColumnInfo(name = "hash")
val hash: String,
@ColumnInfo(name = "changes", typeAffinity = ColumnInfo.BLOB)
var changes: List<DbChange>
)
这是转换器:
class Converters {
companion object {
@JvmStatic
@TypeConverter
fun changesToByteArray(changes: List<DbChange>): ByteArray {
...
}
@JvmStatic
@TypeConverter
fun byteArrayToChanges(bytes: ByteArray): List<DbChange> {
...
}
}
}
而且我已经在注释中添加了 Converters 类:
@Database(entities = [Commit::class], version = 1)
@TypeConverters(Converters::class)
abstract class AppRoomDatabase : RoomDatabase() {
...
}
但是编译器还是报错:
e: /home/perqin/workspaces/cent-budget/cent-budget/app/build/tmp/kapt3/stubs/eaDebug/com/perqin/centbudget/data/sync/commit/Commit.java:20: error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
private java.util.List<? extends com.perqin.centbudget.data.sync.changes.DbChange> changes;
如何解决这个问题?我一点想法都没有……
【问题讨论】:
-
@pRaNaY 不,我不希望 DbChange 成为实体。实际上 DbChange 是一个接口,我需要根据实现手动对其进行序列化和反序列化。
-
您是否尝试过
@Ignore来避免您遇到的编译器错误?@Ignore var changes: List<DbChange> -
@pRaNaY
@Ignore可能不是我想要的,因为我确实需要将序列化的changes存储到数据库中。 -
我很好奇,如果将
List更改为MutableList会发生什么?
标签: android kotlin android-room