2011-01-13 55 views
0

我使用db4o的方式其实只是只读。我将打包一个数据库与应用程序,并做一些后台更新,每隔一段时间我可以处理不同。但是对于我从数据库中显示数据的活动,我不需要做任何更新,所以出于这个原因,我只想从数据库中获取数据并让数据“停用”,这样当活动由于屏幕方向改变等原因导致配置发生变化,我可以快速重新布局活动。什么是停用对象的正确方法,以便它们对我的活动仍然有用。目前,我有代码像android db4o正确停用对象

List<MyObject> mList = db().queryByExample(persistentClass); // db just gets my ObjectContainer 

我试图做这样的事情

db().ext().deactivate(mList); 

,但它似乎并没有work.Do我需要在列表中的每个项目迭代停用呢?

当你在android上改变屏幕方向时,它在我关闭数据库的时候击中了我的活动close方法。但后来开始备份,我不想再次填充mList。

所以我不断收到一个“com.db4o.ext.DatabaseClosedException”异常,因为在我的活动我做的事情一样

mList.size() 

的布局我真的只是想取消画线B/CI从来没有更新他们,怎么能我这样做?

回答

4

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

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

现在你不应该得到一个DatabaseClosedException。

然后我只想补充一点,db4o中的“停用”是完全不同的。它与Activation机制有关。取消激活与激活相反。激活从数据库加载到内存中。取消激活使内存中的对象变为空壳体,而不包含任何数据。明确的停用仅适用于安全内存的特殊场景。

+0

啊,很高兴知道,我已停用理解不正确,谢谢澄清。 – slim 2011-01-14 16:55:29