android - Room 是否允许非原始数据类型作为主键?

标签 android kotlin android-room

使用 Room,我想编写一个 Kotlin @Entity,并将非原始数据类型作为其 @PrimaryKey。例如:

@Entity
data class MyEntity(
    @PrimaryKey val myType: MyType,
    val text: String
)

我在非基本类型与字符串之间提供 TypeConverter。

class Converters {
    @TypeConverter fun fromString(value: String): MyType = MyTypeUtil.parse(value)
    @TypeConverter fun toString(myType: MyType) = myType.toString()
}

我还在我的数据库上正确注册了我的 TypeConverter:

@Database(
    entities = [
        MyEntity::class
    ],
    version = 1
)
@TypeConverters(
    Converters::class
)
abstract class MyDatabase : RoomDatabase() {

    abstract fun myDao(): MyDao
}

编译失败:

...MyDao_Impl.java:使用未经检查或不安全的操作。 使用 -Xlint 重新编译:未选中详细信息。

你能帮我找出问题所在吗? Room 允许我尝试做的事情吗?

最佳答案

是 - Room 允许非原始数据类型作为主键。

您的 TypeConverters 中存在错误 - 您必须提供从 StringMyType 以及从 MyTypeString,因此方法 fromString 必须返回 MyType(现在它返回 String)。改变它,它应该可以工作:)
如果您仍然遇到奇怪的编译错误,请尝试在进行更改后清理项目。

关于android - Room 是否允许非原始数据类型作为主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123977/

相关文章:

android - 执行删除房间(rxjava)

java - 如何将第 3 方库添加到 Android AOSP 构建中?

android - 如何在android中创建通知?

android - Kotlin保存在字符串中重复的特定char的索引

Kotlin 函数类型

android - 如何使用带有预填充数据库的 Room Persistence Library?

android - 如何在使用 Room 时立即获取查询结果?

android - CardView 的 OnClickListener?

android - MediaPlayer.prepare() 在 Android L 上抛出 IllegalStateException

javafx - 标签的格式文本