针对菜鸟人员,老鸟勿扰
说一说realm
这是一个跨平台的数据库操作框架,操作相对简单,速度快,等等优点,可以跨平台共享文件,而且因为不是全部注解样式的,上手还是比较快的.
项目介入
这里我就不做再去介绍了,android方面引入只需要两步
1,项目的builder文件中添加
![引入](https://img-blog.csdnimg.cn/20190620202932452.png)
2,在app下的builder文件中添加
![引入2](https://img-blog.csdnimg.cn/20190620200506968.png)
完事了,极其简单,然后在自己的application中声明初始化一下就好了
说一说使用的优点
- 快,是真的快,无论异步增删改查,还是同步,小批量的操作可以不入异步操作,直接UI线程
- 操作简单,不需要考虑自己的表名称,不需要考虑表的字段的名称,只关心实体数据就完事了
已知缺点(或者感觉不是很合理的地方)
- 在操作的时候,从哪个线程里取出来的数据,修改删除等都必须在那个线程里完成,否则就敢给你Exception,然后就开始百度,对于android来说动态的修改数据是是用数据库最常用的,但是在这里非常麻烦,因为你在主线程中,就会卡在那里虽然慢,但是也会卡顿,如果你在子线程中取出来,当你修改的时候还是要操作子线程,否则就报错
- 每次查询数据的时候都要添加监听器,监听器获取到查询到数据后改变,就会调用onChange方法,然后还得必须赶紧把这个监听器remove掉,否则的话,当你增删改的时候,这个监听器就有的忙了,只要是改变,就会不停的调用这个方法,你想的可能是查询到数据就修改adapter,结果你发现你只是改了个数据,你的adapter就跟抽了筋一样不停刷新,酸爽
- 在修改数据的时候虽然可以不用调用update方法就默认的存储了,但是必须在事务中,我感觉这一块应该再次封装,因为每次修改你先要查询到要修改的数据(查询时候要控制线程,否则下边操作可能会报错,如果你使用executeTransactionAsync或者executeTransaction方法),然后必须再另起一行开启事务,然后修改数据,关闭事务,每次都这样,android中的bean类,多种多样,很难做到写一个方法就搞定所有的,可能需要深入的,具体的,认真的了解然后封装,我没到那程度.
- 当你删除一个指定的数据的时候,你依旧需要先查询到这个数据,就是干什么操作都得先查询这个数据,以前的就不能算了,然后再次开启事务,还要保持一样的线程,才能删除成功,这是很纠结的,在adapter中肯定是主线程,做android的操作数据库习惯子线程,所以又得搞线程.
- 这是最后一点了,我是用的测试机是pda设备,我是用直接连接USB线然后操作,增删改查都没问题了,试试关了应用再开吧,数据没了,我的设置应该不是问题,根据他们的指导来的,完全没想到结果是没有数据了,查不到了,只要关闭应用就么有了,然后我认为可能是debug的原因,打包吧,还是没有,具体原因我不知道,可能是我设置有问题,具体哪里的问题我根本没法去查,因为网上用的最多的是ios或者其他语言,android都是相对简单的,而且QQ交流群都没有一个(我搜索realm,realm数据库一个都没找到),有问题根本找不到好的解决方案,这是最头疼的,下边放上我的配置,有大牛可以看一眼.
总结
realm确实是一个好的框架,可能我的走位不正确,老是error,或者我对线程控制太过于依赖三方,导致我并不能完美的驾驭这货,但是我相信,我碰到的问题肯定不止我自己碰到,任何接触realm的android开发人员,只要想用,只要经常用,这些问题多多少少都会浮现出来,一点两点可能不会在意,既然用别人的东西就要习惯,但是多了以后就会觉得难受.所以我放弃了realm
写了这些不是说这不是一个好的框架,只是想告诉要或者准备尝试realm的android程序猿们一些碰到的问题,少走弯路,希望你们以后能够正常的对接,然后分享出来.
我是蛇精病,我喂自己袋盐.