【发布时间】:2021-05-17 14:58:59
【问题描述】:
在我的应用程序中,我有一个模型类,它有一些变量,我可以使用改造和房间数据库在这个应用程序中调用和显示这些数据。这意味着这个应用程序首先从服务器收集数据,然后显示在房间数据库中。但是当我在这个模型类中使用列表时,它会显示这个错误。这是我的代码
电影.kt
@Entity(tableName = "movie_table")
data class Movie(
@SerializedName("Id")
@PrimaryKey(autoGenerate = true)
val id: Int,
@SerializedName("Title")
@Expose
val title: String,
@SerializedName("Year")
@Expose
val Year: Int,
@SerializedName("Actors")
@Expose
val actorDetails: List<Actor>
)
演员.kt
data class Actor(
@SerializedName("ActorName")
@Expose
val actorName: String,
@SerializedName("ActorPoster")
@Expose
val actorImage: String
)
MovieDao.kt
@Dao
interface MovieDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertMovie(movie: Movie)
@Query("SELECT * FROM movie_table")
suspend fun getAllMovieDB(): List<Movie>
}
电影数据库.kt
@Database(
entities = [Movie::class],
version = 1
)
abstract class MovieDatabase : RoomDatabase() {
abstract fun getMovieDao(): MovieDao
companion object {
@Volatile
private var instance: MovieDatabase? = null
private val LOCK = Any()
operator fun invoke(context: Context) = instance
?: synchronized(LOCK) {
instance
?: buildDatabase(context).also {
instance = it
}
}
private fun buildDatabase(context: Context) = Room.databaseBuilder(
context.applicationContext,
MovieDatabase::class.java,
"movieDatabase"
).build()
}
}
这是我的假 JSON API enter link description here
这是错误 enter image description here 我找不到任何错误,我也在使用分析来获取错误,但它什么也没显示。 我该如何解决这个问题?谢谢。
【问题讨论】:
-
Room 无法插入 List 等自定义类型,您需要为字段 Actor 提供自定义 Serializer 并将其标记为已忽略
-
我的建议是使用外键为演员创建一个新表
-
能否举例说明
-
谢谢@JoãoPauloSena。我使用类型转换器解决了这个错误。
标签: json android-studio retrofit2 android-room