【发布时间】:2020-04-02 07:23:33
【问题描述】:
我正在开发新闻应用程序,但出现以下错误 错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。 private final yodgorbek.komilov.musobaqayangiliklari.model.Source source = null;
在我实现数据库的 SportNewsDatabase.kt 类下方
@Database(entities = [Article::class], version = 1, exportSchema = false)
abstract class SportNewsDatabase : RoomDatabase() {
abstract fun sportNewsDao(): SportNewsDao
companion object {
private var instance: SportNewsDatabase? = null
fun getInstance( context: Context): SportNewsDatabase? {
if (instance == null) {
synchronized(SportNewsDatabase::class.java) {
instance = Room.databaseBuilder(context.applicationContext, SportNewsDatabase::class.java, "article_database")
.fallbackToDestructiveMigration()
.build()
}
}
return instance
}
}
}
在 SportNewsDao.kt 下方
interface SportNewsDao {
@Query("SELECT * FROM article")
fun getAllData(): LiveData<List<Article>>
@Insert
suspend fun addAll(article: List<Article>)
@Update
suspend fun updateArticle(article: Article)
@Delete
suspend fun deleteArticle(article: Article)
}
在 Article.kt 下方
@Entity(tableName = "article")
data class Article(
@ColumnInfo(name = "author") val author: String,
val content: String,
val description: String,
var publishedAt: String,
val source: Source,
val title: String,
val url: String,
val urlToImage: String
)
在 Source.kt 下
data class Source(
val id: Any?,
val name: String
) {
}
在我尝试进行转换的 SourceTypeConverters.kt 下方
object SourceTypeConverters {
@TypeConverter
fun ConvertSource(source: Source?): String? {
return source?.toString()
}
@TypeConverter
fun ConvertSource(source: String?): Source? {
return source?.let { Source(it) }
}
}
我想知道我在哪里犯了错误我必须做什么才能避免我的应用程序出错。
【问题讨论】:
-
这不是使用数据库的正确方法。您应该为 Source 创建另一个表并使用外键约束。但是如果你想使用类型转换器将其转换为 JSON 并使用 gson 转换器检索它。
标签: android kotlin android-room typeconverter