Room数据库 -- TypeConverter简单理解

简介: Room数据库 -- TypeConverter简单理解

TypeConverter是什么


TypeConverterRoom数据库的类型转换器,可以对收到的数据进行类型转换

例如:

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
}
复制代码

image.png


使用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;
    }
}
复制代码


数据存储结果

image.png


其它


如何把TypeConverter添加给多个对象

将注解添加到Datebase对象上

@Database(entities = arrayOf(User::class), version = 1)
    @TypeConverters(Converters::class)
    abstract class AppDatabase : RoomDatabase() {
        abstract fun userDao(): UserDao
    }



相关文章
|
数据库连接 数据库 Android开发
Android -- Room简化数据库设置图书案例
Android -- Room简化数据库设置图书案例
51 0
|
7月前
|
存储 SQL 数据库
【Android 从入门到出门】第六章:使用Room数据库并测试
【Android 从入门到出门】第六章:使用Room数据库并测试
109 4
|
数据库 Android开发 数据库管理
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
82 0
|
数据库 Android开发 数据库管理
Android 使用Room操作数据库进行数据库版本的升级和迁移
Android 使用Room操作数据库进行数据库版本的升级和迁移
598 0
|
存储 数据库 Android开发
Android 使用Room操作SQLite数据库让其变得无比高效和简洁(前一篇文章的完善)
Android 使用Room操作SQLite数据库让其变得无比高效和简洁(前一篇文章的完善)
222 0
|
数据库 Android开发 数据库管理
Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)
Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)
257 0
|
SQL Java 测试技术
Android的room数据库使用小结(kotlin)
Android的room数据库使用小结(kotlin)
|
SQL Java 数据库
安卓Jetpack组件Room数据库框架的使用(附Demo)
安卓Jetpack组件Room数据库框架的使用(附Demo)
356 0
安卓Jetpack组件Room数据库框架的使用(附Demo)
|
SQL 存储 XML
Jetpack Room — 给你一种新的数据库操作体验!
🏀在我们日常开发中,经常要和数据打交道,所以存储数据是很重要的事。如果你在处理数据存储这一块时想要有更好的体验,那你不妨来看看Room吧~
|
SQL 数据库 Android开发
【安卓开发】数据库Room框架的学习和使用
【安卓开发】数据库Room框架的学习和使用
125 0