这是我唯一的实体:
@Entity(tableName = "sticker_packs")
class StickerPack(
@PrimaryKey(autoGenerate = true)
val identifier: Int = 0,
var name: String,
var publisher: String,
@TypeConverters(StickerConverter::class)
private var stickers: List<Sticker> = emptyList())
这是我的自定义Sticker类:
data class Sticker(
val emojis: List<String>,
var imageDir: String,
var size: Long = 0L)
这是我的数据库类:
@Database(entities = [StickerPack::class], version = 1)
//I get this same error with or without my Typeconverters here
@TypeConverters(StickerConverter::class)
abstract class StickerPacksDatabase: RoomDatabase() {
abstract val stickerPacksDao: StickerPacksDao
companion object{
@Volatile
private var INSTANCE: StickerPacksDatabase? = null
fun getInstance(context: Context): StickerPacksDatabase{
synchronized(this){
var instance = INSTANCE
if(instance == null){
instance =
Room.databaseBuilder(context.applicationContext, StickerPacksDatabase::class.java, "sticker_packs_database")
.build()
INSTANCE = instance
}
return instance
}
}
}
}
这是我的typeconverter
class StickerConverter {
@TypeConverter
fun stickersToJson(stickers: List<Sticker>): String = Gson().toJson(stickers)
@TypeConverter
fun jsonToStickers(json: String): List<Sticker> = Gson().fromJson(json)
private inline fun <reified T> Gson.fromJson(json: String): T = fromJson(json, object: TypeToken<T>() {}.type)}
我并不想用Gson把一个列表转换成一个字符串,但是当我试图构建这个项目时,我得到了下面的错误:
无法确定如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。
但这正是我要做的。我可能在某个地方犯了错误,但我似乎找不到它。我试着把@TypeConverters
符号移到任何可能的地方,但问题仍然存在
1条答案
按热度按时间lsmd5eda1#
您需要将
@TypeConverters
注解添加到AppDatabase
类中,以便Room可以使用您为AppDatabase
中的每个实体和DAO定义的转换器: