我在我的应用程序中使用GreenDao,目前遇到一个有趣的问题。
首先,我删除了一个实体项“A”(ID = 1)并使用来自DaoSession的runInTx()在事务中运行它。
删除后,我的应用程序返回到项目列表,并且预计会发现我的项目已被删除。 然后我将新项目实体项“B”添加到DB中,当我再次使用EntityDao.QueryBuilder()返回列表时.list()我发现实体项“A”再次列出,而不是实体项“B” 。
当我检查数据库时,使用相同的ID = 1创建了实体项“B”。在我看来列出所有项目将返回缓存的实体。
删除后我执行了以下DaoSession.clear(),但它仍然导致缓存已删除的实体。
有人对这个问题有任何想法吗?
答案 0 :(得分:1)
我找到了解决这个问题的方法。
问题是我在删除活动中是DaoSession.clear(),调用activity.finish()然后返回列表项活动。
这显然是活动管理问题,因为我设计了每个活动都有自己的DaoSession。 DaoSession的每个实例都将包含GreenDao对象的会话缓存。
可以阅读GreenDao会话缓存的更多信息here
因此解决方案是在删除活动完成后清除List Item活动的DaoSession。