TypeConverter是什么
TypeConverter
是Room
数据库的类型转换器,可以对收到的数据进行类型转换
例如:
1、服务器返回Long类型的时间戳,我们可以通过TypeConverter
将时间戳转换为Date类型 2、如果服务器返回了对象数组,默认Room是无法处理数组的,此时我们可以通过TypeConverter
将Json中的数组转换为对象
使用TypeConverter存储数组和日期
首先定义一个Student类和Book类
一个学生是可以有多本书的,所以我们的Student构造中有一个books:List
的列表
@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 }