Android-->Realm数据库使用注意事项

不知不觉Realm已经更新到2.2.2了.
Realm Java 2.2.2

但是,还有多少坑等着你呢?

以下写一些我遇到的坑:


1:Realm需不需要close呢?

当你每次调用 Realm.getDefaultInstance(); 的时候, Realm的引用计数就会+1.
也就是说, close()方法调用次数也要+1, 才能释放Realm资源.

Realm再调用close之后, 对应线程上where查询出来的结果数据, 会被清空.
比如, realm.where(User.class).findAll(). 得到了一个集合, 当你close之后,
集合中的user对象的所有字段数据都会失效.

原因就是, Realm使用的是代理的方法得到字段的值, 也就是你必须要通过get方法返回字段的值
才有效. 如果你直接通过成员是访问不到数据的.

这样做了,也就很容易实现realm的数据变换监听事件通知了.

所以: 如果你需要一直保持对查询出来的数据引用的话, 请不要close. 否则数据全部会失效.
如果你既想close, 又想数据有效. 那么请new一个对象, 并且调用get方法set方法, 读取和设置数据
切记不可 直接访问成员变量读取数据字段值....这样是会返回null的.

总结一下:
从Realm数据库中通过where查询出来的对象user.
1:在调用close()方法之后, user对象会处于无效状态, 此时调用get方法会报异常.
2:直接通过user.成员变量的方式, 读取到的数据是null. 必须通过get方法才能拿到数据.


后续补充....


至此: 文章就结束了,如有疑问: QQ群:274306954 欢迎您的加入.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 介绍 Realm 是一个 MVCC (多版本并发控制)数据库,由Y Combinator公司在2014年7月发布一...
    带心情去旅行阅读 64,529评论 34 134
  • 首先 花卉园艺师是一个职业资格的证书 分为五个等级 五级花卉园艺师(初级)、 四级花卉园艺师(中级)、 三级花卉园...
    金桥兴业阅读 1,569评论 0 1
  • 固执己见本没错 前段时间读完的《乔布斯传》,现实中的乔布斯采用非黑即白的思维方式。他认为,人要么就是“觉悟的”,要...
    栀子悠声阅读 281评论 2 2