sas*_*liy 0 android typeconverter kotlin android-room
我正在开发新闻应用程序,但出现以下错误错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。私人决赛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
}
}
}
Run Code Online (Sandbox Code Playgroud)
在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)
}
Run Code Online (Sandbox Code Playgroud)
下面文章.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
)
Run Code Online (Sandbox Code Playgroud)
下面 Source.kt
data class Source(
val id: Any?,
val name: String
) {
}
Run Code Online (Sandbox Code Playgroud)
在我尝试进行转换的 SourceTypeConverters.kt 下面
object SourceTypeConverters {
@TypeConverter
fun ConvertSource(source: Source?): String? {
return source?.toString()
}
@TypeConverter
fun ConvertSource(source: String?): Source? {
return source?.let { Source(it) }
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道我在哪里犯了错误,为了避免我的应用程序出错,我必须做什么。
typeConvertor 似乎有点不对劲。而不是对象让它成为一个类。将其作为 JSON 字符串存储在 DB 中并检索它(GSON 库可选)。
class SourceTypeConverter {
@TypeConverter
fun fromSource(source: Source): String {
return JSONObject().apply {
put("id", source.id)
put("name", source.name)
}.toString()
}
@TypeConverter
fun toSource(source: String): Source {
val json = JSONObject(source)
return Source(json.get("id"), json.getString("name"))
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用 annotation 将此 TypeConvertor 注册到数据库TypeConverter。
@Database(entities = [Article::class], version = 1, exportSchema = false)
@TypeConverters(SourceTypeConverter::class)
abstract class SportNewsDatabase : RoomDatabase() {
/* your code here */
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |