Room数据库--TypeConverter
2021/9/12 19:05:28
本文主要是介绍Room数据库--TypeConverter,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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 }
这篇关于Room数据库--TypeConverter的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升