本篇文章不是介绍GreenDao的配置和基础使用,记录一下GreenDao缓存的问题,帮助遇到同样问题的朋友找到原因和方法,下面是示例:
场景重现
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | List chats = daoSession.getChatSessionDao()
 .queryBuilder()
 .orderDesc(ChatSessionDao.Properties.Updatetime)
 .list();
 
 
 ChatSession cs = chats.get(0);
 Log.d("body",cs.getBody());
 cs.setBody(cs.getBody() + "new");
 daoSession.getChatSessionDao().update(cs);
 
 
 List chats = daoSession.getChatSessionDao()
 .queryBuilder()
 .orderDesc(ChatSessionDao.Properties.Updatetime)
 .list();
 
 Log.d("body",chats.get(0).getBody());
 
 | 
结果发现两次的body的值是一样的,使用工具查看Sqlite数据库,发现body的值已经变化了,也就是说,我们第二次查询并没有真正执行,返回的是第一次查询的结果。如果要解决缓存问题,这里就要用到DaoSession的一个方法:
在示例代码中应该写在第二次查询前面
| 12
 3
 
 | daoSession.clear();
 ......
 
 | 
PS:这个清理缓存的方法,会清除所有表的缓存,目前没有发现可以清除单个表或者某个查询的缓存的方法。
GreenDao配置与使用
GreenDao详细的配置和Demo可以参考:
- ORM 框架之 greenDAO 使用心得
- GreenDao
PS:
你可以关注的我 Github、CSDN 和 微博