Android 房间-保存自定义对象列表

Android 房间-保存自定义对象列表,android,kotlin,android-room,Android,Kotlin,Android Room,我正试图将列表保存到房间数据库中 我发现以下错误: error: Cannot figure out how to save this field into database. You can consider adding a type converter for it. private java.util.List<xxx.models.OBJECTX> carList; 错误:无法确定如何将此字段保存到数据库中。可以考虑为其添加类型转换器。 private java.

我正试图将
列表
保存到房间数据库中

我发现以下错误:

error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private java.util.List<xxx.models.OBJECTX> carList;
错误:无法确定如何将此字段保存到数据库中。可以考虑为其添加类型转换器。
private java.util.List carList;
会议室实施:

@Entity(tableName = "nameOfTable")
class CachedObjectX(
    @PrimaryKey
    @ColumnInfo(name = "id") val id: Long,

    @ColumnInfo(name = "list")
    var carList: List<ObjectX>
)

@Dao
interface CachedObjectXDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertAll(list: ArrayList<CachedObjectX>)

    @Delete
    fun delete(list: ArrayList<CachedObjectX>)

    @Query("SELECT * FROM ...")
    fun getAll(): ArrayList<CachedObjectX>

}

class CachedObjectXConverter {

    companion object {
        var gson = Gson()

        @TypeConverter
        @JvmStatic
        fun toInsuredVehicle(json: String): List<ObjectX> {
            val type = object : TypeToken<List<ObjectX>>() {}.type
            return gson.fromJson(json, type)
        }

        @TypeConverter
        @JvmStatic
        fun toJson(torrent: List<ObjectX>): String {
            val type = object: TypeToken<List<ObjectX>>() {}.type
            return gson.toJson(torrent, type)
        }
    }

}

@Database(entities = [CachedObjectX::class], version = 1, exportSchema = false)
@TypeConverters(CachedObjectXConverter::class)
abstract class CachedObjectXDb : RoomDatabase() {
    companion object {
        private const val DB_NAME = "CachedObjectX.db"

        val instance: CachedObjectXDb by lazy {
            Room.databaseBuilder(
                getContext(),
                CCchedObjectXDb::class.java,
                DB_NAME
            ).build()
        }
    }

    abstract fun getDao(): CachedObjectXDao
}
@实体(tableName=“nameOfTable”)
类CachedObjectX(
@主键
@ColumnInfo(name=“id”)val id:Long,
@ColumnInfo(name=“list”)
卡利斯特:名单
)
@刀
接口CachedObjectXDao{
@插入(onConflict=OnConflictStrategy.REPLACE)
fun insertAll(列表:ArrayList)
@删除
乐趣删除(列表:ArrayList)
@查询(“选择*自…”)
fun getAll():数组列表
}
类CachedObjectXConverter{
伴星{
var gson=gson()
@类型转换器
@JvmStatic
fun-toInsuredVehicle(json:String):列表{
val type=object:TypeToken(){}.type
返回gson.fromJson(json,类型)
}
@类型转换器
@JvmStatic
趣味toJson(torrent:List):字符串{
val type=object:TypeToken(){}.type
返回gson.toJson(torrent,类型)
}
}
}
@数据库(实体=[CachedObjectX::class],版本=1,exportSchema=false)
@类型转换器(CachedObjectXConverter::类)
抽象类CachedObjectXDb:RoomDatabase(){
伴星{
private const val DB_NAME=“CachedObjectX.DB”
val实例:CachedObjectXDb by lazy{
Room.databaseBuilder(
getContext(),
CCchedObjectXDb::class.java,
数据库名称
).build()
}
}
抽象趣味getDao():CachedObjectXDao
}

有趣的是,我添加了
TypeConverter
,但它仍然抛出错误。我的实现有什么问题?刚从房间开始,所以很有可能出了什么问题。提前感谢。

您必须使ObjectX的pojo也成为一个实体

您必须使ObjectX的pojo也成为一个实体