前言
上一篇文章我们讲述room的基本用法.
本篇将讲述: 复杂数据处理, 配合Flow实现全局UI刷新, DB版本升级方式.
Room的其他功能
以下功能了解即可
- 定义对象间的关系:
有一对多, 多对多什么的. 但博主暂时没有业务需要在 App 中构建过于庞大且复杂的数据库. 而且构建这种关系的对象时, 必须要额外创建一个复合对象来容纳他们. - 定义视图: 一般多表关联的复杂查询才需要视图
- 预填充数据库: 有 应用资源预填充, 文件系统预填充, 数据库的迁移 等
需要了解的, 请看查看官方文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、复杂数据处理?
有的时候我们会对象套对象, 对象套集合, 例如:
@Entity
class RoomTwoEntity {
@PrimaryKey
var id: String = ""
@ColumnInfo
var nickname: String? = null
@ColumnInfo
var imgs: MutableList<Image>? = null //集合实体
@ColumnInfo
var room: RoomEntity? = null //其他实体
}
class Image(val res: Int)
上面 @ColumnInfo 直接写是不行的. room也不知道它算什么类型.
我们为这些实体单独创建表, 再管理关联关系的话, 相当麻烦
@TypeConverter 会让这件事非常简单.
1. @TypeConverter
类型转换器, 它的本质就是:
插入库表时, 将实体类型转换为 基本类型. 查询时再讲基本类型转换为实体类型; 例如: 对象转换为JSON, Date转换为Long等
第一步: 编写转换器
class MyConverters {
@TypeConverter
//Image集合 转换为 Json字符串
fun imgsToStr(imgList: MutableList<Image>? = null): String? {
imgList ?: return null
return Gson().toJson(imgList)
}
@TypeConverter
//Json字符串 转换为 Image集合
fun strToImgs(imgStr: String?): MutableList<Image>? {
imgStr ?: return null
return imgStr.toBeanList()
}
@TypeConverter
//实体 转换为 Json字符串
fun roomToStr(room: RoomEntity?): String? {
room ?: return null
return Gson().toJson(room)
}
@TypeConverter
//Json字符串 转换为 实体
fun strToRoom(str: String?
Room数据库操作:复杂数据处理、Flow刷新UI与版本升级

本文详细介绍了Android Room数据库如何处理复杂数据,包括使用@TypeConverter进行对象与基本类型转换,以及在数据库升级过程中如何进行表的增删改。同时,讲解了如何配合Flow实现全局UI的自动刷新,讨论了数据库版本升级的策略,如清空重建和按版本号升级,并给出了相应的示例代码。
最低0.47元/天 解锁文章
400

被折叠的 条评论
为什么被折叠?



