greenDAO数据本地化

还记得刚开始学Android那会,使用SQLiteOpenHelper来操作SQLite数据库,然后第一个APP开发就频繁地使用其将数据本地化处理,结果呢?真心是自讨苦吃,各种问题让我烦不胜烦:数据刷新不及时啦,本地数据和后台数据同步问题啦,业务一复杂代码各种乱七八糟···

总之第一个APP开发中因为使用SQLite给我留下了较深的阴影,故此在之后的APP开发中,我几乎没再使用SQLite了,后来想想,这也得益于网络的提速,流量费的降低等外部原因,所以不用也没什么影响。

但是,老话说得好:存在即合理!既然Android有这个玩意,那么肯定有其使用场景的,只不过那会我初学瞎用而已,今天我们就以greenDAO这个数据库框架入手,再来聊聊数据本地化的问题。

关于greenDAO嘛,首先当然是要看看文档了:
GitHub项目地址
greenDAO官方文档

然后我们从官方文档中找到这两张图,可以更直观的了解greenDAO所处的位置及关系,第二张图列举了几个常用ORM关系型数据库框架性能对比,很明显greenDAO性能上远优于其它框架。


greenDAO关系图
ORM关系型数据库框架性能对比

greenDAO除了性能上有很大的优势外,还十分易用,基本上按着流程走就妥妥的了,方便快捷,比原来用SQLiteOpenHelper和SQLiteDatabase快了很多,也少写了很多代码,关于如何使用笔者在这里并不想过多的进行介绍,相关可参考:
https://www.cnblogs.com/whoislcj/p/5651396.html
https://blog.csdn.net/qq_30379689/article/details/54410838

接下来才是我想说的:
1)虽然greenDAO提供了@ToOne和@ToMany这样的关系注解,用于解决一对一和一对多的表关系问题,但是,有时候我们并不想建那么多张表,又或者bean类里相应关系用的是静态内部类,这时,我们可以使用下面注解:

 @Convert(converter = XXX.class, columnType = String.class)

意思就是编写一个 XXX.class继承于PropertyConverter,在这个类里完成数据的转换,确保存进数据库里的是String类型,取出来又转换为你需要的类型,这样有时能带来不少方便。
2)跟其他第三方框架一样,greenDAO也有其混淆规则,否则打包会出错,这些都在官方文档有说明,在此copy一份记录一下:

### greenDAO 3
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**
# If you do not use RxJava:
-dontwarn rx.**

3)我们来说说数据本地化的使用场景,算是回答最开始提出的相关问题。
首先,在今时今日到处有WiFi,或无限量流量包等大环境下,数据本地化确实被弱化了,毕竟网速那么快,用户又极少出现没网络状态,而且如果没网络的话,基本上你打开APP也做不了什么事了。
但是,数据本地化还是有其用武之地的,个人认为,数据本地化的目的在于用户体验的优化,更多的时候说白了就是“别让用户等”,明白这个后,我们自然很容易找到其使用场景:
比如一些更改不是很频繁的基础数据或配置数据
比如一些用户本地操作类数据(浏览记录啊,个人收藏啊,个人购物车啊)
比如一些使用超级频繁的数据为减轻服务器压力而必须做的本地化(最典型的IM功能聊天记录)
···
4)我们再来说说数据本地化的使用方法,这里就涉及到本地数据与后台数据的同步问题了,我们分情况进行说明:
A:对于“查”操作,先从本地数据库查数据然后进行界面显示给用户看,同时调用接口访问后台数据,获取数据后与本地进行对比,如果有差异更新本地数据库并刷新界面(如果属于一些更改不是很频繁的配置数据,这里也可做一个优化,并不一定每次都要访问后台数据进行比对,可设置一定的访问频率)
B:对于“增删改”操作,这里又得一分为二
B1:如果这一部分数据非常重要的话,建议使用的顺序为,调用接口进行后台的“增删改”,成功后再进行本地数据库的同步,不成功则将结果反馈给用户
B2:如果这一部分数据不是很重要,换句话说“增删改”的结果并不是非常重要的情况下,我们为了更好的用户体验,可以直接先存本地,本地保存成功后就默认OK了,然后再调用后台接口去更新数据,而至于后台是否更新成功,我们并不关心
C:还有另一种做法,所有“增删改查”操作全部使用本地数据库,然后设置一定的标记位用于标记数据的同步状态(这里需与后台开发人员约定好),定时在后台进行本地数据库与后台数据库的同步操作。(这种做法比较麻烦,而且存在数据丢失或同步不及时等问题,不大建议使用)
D:另外,数据本地化其实也不一定非得自己去存本地数据库,比如现在使用的很多网络请求框架都带有缓存功能,所以有些时候也可直接利用网络请求框架的缓存就行了。
E:需要说明的另一点,数据本地化还得考虑一个安全性的问题,是否需要进行加密操作这也是开发者该考虑的问题。

5)开发中,为了更直接的查看本地数据库的数据,这里推荐一个工具:SQLite编辑器,可直接安装到手机或模拟器上(需root),然后便可直接打开数据库进行数据查看,如下图所示:


SQLite编辑器使用示意图
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 关键词:平衡 题主:男 问:你好,冷老师。我和我的女朋友相识2个多月,她是我们单位的实习生,在我们单位实习一个月,...
    冷爱阅读 581评论 0 1
  • 你的财富不能让你永生,你的文章能 一个人活着的是他的思考,是他的精神,是他的灵魂,皮囊会腐朽,灵魂却可以永久散发香...
    162蔡茂润阅读 144评论 0 0
  • 元旦将至,2017马上就要来了。 不知道你的日子是琴棋书画诗酒花,还是柴米油盐酱醋茶? 回顾我的201...
    良真阅读 445评论 4 3
  • 1.我不是来普渡众生的,我在被灵魂催眠。 2.时间真是大野老师,前三十年荒野求生,后面大树乘兴。 3.当我睡在你身...
    锄风少年阅读 299评论 1 1