回顾青训营「数据存储」—— Room
这是我参与「第四届青训营 」笔记创作活动的的第3天
本文接上一篇回顾 Android「网络通讯」—— 利用反射
一、回顾一下现有框架
二、了解与体验
之前体会过注解的好处,停不下来了,本次依旧使用带有注解的Room框架
1、Room原理介绍
核心
-
编译期,通过kapt处理
@``Dao
、@Database
注解,动态生成对应的实现类 -
底层使用Android提供的
SupportSQLiteOpenHelper
实现数据库的增删改查等操作
2、kapt注解处理
注解处理过程
kapt生成的代码在 build/generated/source/kapt/
3、使用
简单使用参考字节青训营资料三,不做过多介绍
三、实战
1、序列化选择
既然是用到了数据存储,肯定就离不开数据结构的转换,发现Moshi配合Room的效率还是不错的
此处参考 新一代Json解析库Moshi使用及原理解析(侵删)
而且本次的项目使用kotlin,所以选择Moshi会更加优化一些
2、单例及初始化
根据之前的学习,我们可以拆解为这几步:数据库 -> Model-> Dao ->build 生成代码
四、问题
1、Model修改,APP闪退
场景:在开发的过程中就经常有小伙伴新增/修改了一个Model,直接Push了代码,
此时另外一个小伙伴Update了一下代码,但是正准备兴高采烈的Push自己的代码,却发现闪退了。
解决方案:
使用自动迁移
此时我们可以通过更新迭代我们的数据库版本,这时候他会生成一个Json文件夹,存储之前的数据类型,并进行合并操作
2、Model存在复杂类型 如List<>,准备进行存储却又闪退了(TypeConverter)
场景:当有一个Lise类型的数据之后,我们准备进行存储,但是却发现Room不支持这种类型,这时候应该如何操作呢?
解决方案:使用类型转换器
萌新初学,本文为笔记,大佬若有更好的方案欢迎评论区留言