TypeConverter是什么
TypeConverter是Room数据库的类型转换器,可以对收到的数据进行类型转换
例如:
1、服务器返回Long类型的时间戳,我们可以通过TypeConverter将时间戳转换为Date类型
2、如果服务器返回了对象数组,默认Room是无法处理数组的,此时我们可以通过TypeConverter将Json中的数组转换为对象
使用TypeConverter存储数组和日期
首先定义一个Student类和Book类
一个学生是可以有多本书的,所以我们的Student构造中有一个books:List<Book>的列表
@Entity
data class Book(var name: String) {
@PrimaryKey(autoGenerate = true)
var id: Long? = null
}
@TypeConverters(BookConvert::class, DateConverter::class)//这里如果没有声明注解,是无法编译通过的,报错信息如下图,只有定义了
@Entity
data class Student(var name: String, var books: List<Book>, var date: Date) {
@PrimaryKey(autoGenerate = true)
var id: Long? = null
}
使用BookConvert存储,Book数组
class BookConvert {
private val gson = Gson()
@TypeConverter
fun objectToString(list: List<Book>): String {
return gson.toJson(list)
}
@TypeConverter
fun stringToObject(json: String?): List<Book> {
val listType: Type = object : TypeToken<List<Book>>() {}.type
return gson.fromJson(json, listType)
}
}
使用DateConverter进行日期和时间戳转化
class DateConverter {
@TypeConverter
fun revertDate(value: Long): Date {
return Date(value);
}
@TypeConverter
fun converterDate(value: Date): Long {
return value.time;
}
}
数据存储结果
其它
如何把TypeConverter添加给多个对象
将注解添加到Datebase对象上
@Database(entities = arrayOf(User::class), version = 1)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
————————————————
版权声明:本文为CSDN博主「安安安安卓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ymeddmn/article/details/120249225