TypeConverter
是Room
数据库的类型转换器,可以对收到的数据进行类型转换
例如:
1、服务器返回Long类型的时间戳,我们可以通过TypeConverter
将时间戳转换为Date类型
2、如果服务器返回了对象数组,默认Room是无法处理数组的,此时我们可以通过TypeConverter
将Json中的数组转换为对象
一个学生是可以有多本书的,所以我们的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 }
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) } }
class DateConverter { @TypeConverter fun revertDate(value: Long): Date { return Date(value); } @TypeConverter fun converterDate(value: Date): Long { return value.time; } }
将注解添加到Datebase对象上
@Database(entities = arrayOf(User::class), version = 1) @TypeConverters(Converters::class) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }