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
}