我使用db4o的方式实际上只是只读的。我将使用应用程序打包一个数据库,然后不时地对它进行一些后台更新,我可以用不同的方式处理它。但是对于我从db显示数据的活动,我不需要做任何更新,所以出于这个原因我只想从数据库中获取数据并让数据“停用”,所以当活动有一个configurationChange由于屏幕方向改变或其他原因,我可以再次快速布局活动。停用对象的正确方法是什么,以便它们仍可用于我的活动。目前我的代码类似于
List<MyObject> mList = db().queryByExample(persistentClass); // db just gets my ObjectContainer
我尝试过做这样的事情
db().ext().deactivate(mList);
但似乎没有用。我是否需要遍历列表中的每个项目以停用它?
当您在Android上更改屏幕方向时,它会触及我关闭数据库的活动关闭方法。但然后开始备份,我不想再次填充mList。
所以我不断收到“com.db4o.ext.DatabaseClosedException
”异常,因为在我的活动布局中,我会做
mList.size()
我真的只想停用对象b / c我永远不需要更新它们,我该怎么做?
答案 0 :(得分:4)
首先,您需要确保加载所有对象。 db4o仅返回延迟加载列表,该列表在您访问它们时加载对象。您需要将对象复制到不需要正在运行的数据库的常规列表。这很简单,只需将查询结果传递给新的数组列表:
List<MyObject> mList = new ArrayList<MyObject>(db().queryByExample(persistentClass));
现在你不应该得到DatabaseClosedException。
然后我只想补充说db4o中的'deactivation'是完全不同的。它与Activation - 机制有关。停用与激活相反。激活加载到数据库中的对象到内存中。取消激活使内存中的对象变为空壳,其中没有数据。显式停用仅对安全记忆的特殊情况有用。