android db4o正确停用对象

时间:2011-01-13 22:42:09

标签: java android db4o onconfigurationchanged

我使用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我永远不需要更新它们,我该怎么做?

1 个答案:

答案 0 :(得分:4)

首先,您需要确保加载所有对象。 db4o仅返回延迟加载列表,该列表在您访问它们时加载对象。您需要将对象复制到不需要正在运行的数据库的常规列表。这很简单,只需将查询结果传递给新的数组列表:

 List<MyObject> mList = new ArrayList<MyObject>(db().queryByExample(persistentClass)); 

现在你不应该得到DatabaseClosedException。

然后我只想补充说db4o中的'deactivation'是完全不同的。它与Activation - 机制有关。停用与激活相反。激活加载到数据库中的对象到内存中。取消激活使内存中的对象变为空壳,其中没有数据。显式停用仅对安全记忆的特殊情况有用。