回顾青训营「数据存储」—— Room|青训营笔记

122 阅读2分钟

回顾青训营「数据存储」—— Room

这是我参与「第四届青训营 」笔记创作活动的的第3天

本文接上一篇回顾 Android「网络通讯」—— 利用反射

一、回顾一下现有框架

img

二、了解与体验

​ 之前体会过注解的好处,停不下来了,本次依旧使用带有注解的Room框架

1、Room原理介绍

核心

  • 编译期,通过kapt处理@``Dao@Database注解,动态生成对应的实现类

  • 底层使用Android提供的SupportSQLiteOpenHelper实现数据库的增删改查等操作

2、kapt注解处理

注解处理过程

img

kapt生成的代码在 build/generated/source/kapt/

3、使用

​ 简单使用参考字节青训营资料三,不做过多介绍

三、实战

1、序列化选择

​ 既然是用到了数据存储,肯定就离不开数据结构的转换,发现Moshi配合Room的效率还是不错的

image-20220822214404552

image-20220822214454342

此处参考 新一代Json解析库Moshi使用及原理解析(侵删)

而且本次的项目使用kotlin,所以选择Moshi会更加优化一些

2、单例及初始化

​ 根据之前的学习,我们可以拆解为这几步:数据库 -> Model-> Dao ->build 生成代码

四、问题

1、Model修改,APP闪退

场景:在开发的过程中就经常有小伙伴新增/修改了一个Model,直接Push了代码,

此时另外一个小伙伴Update了一下代码,但是正准备兴高采烈的Push自己的代码,却发现闪退了。

解决方案:

使用自动迁移

image.png

此时我们可以通过更新迭代我们的数据库版本,这时候他会生成一个Json文件夹,存储之前的数据类型,并进行合并操作

2、Model存在复杂类型 如List<>,准备进行存储却又闪退了(TypeConverter)

场景:当有一个Lise类型的数据之后,我们准备进行存储,但是却发现Room不支持这种类型,这时候应该如何操作呢?

解决方案:使用类型转换器

image.png

image.png

image.png 参考Google 引用复杂数据

萌新初学,本文为笔记,大佬若有更好的方案欢迎评论区留言