Java androiddb4o正确停用对象

Java androiddb4o正确停用对象,java,android,db4o,onconfigurationchanged,Java,Android,Db4o,Onconfigurationchanged,我使用db4o的方式实际上是只读的。我将用应用程序打包一个db,并时不时地对其进行一些后台更新,我可以以不同的方式处理这些更新。但是,对于显示数据库数据的活动,我不需要进行任何更新,因此,出于这个原因,我只想从数据库中获取数据,并将该数据“停用”,以便当活动因屏幕方向更改或其他原因而发生配置更改时,我可以再次快速布局活动。停用对象以使其仍可用于我的活动的正确方法是什么。目前我有类似的代码 List<MyObject> mList = db().queryByExample(persi

我使用db4o的方式实际上是只读的。我将用应用程序打包一个db,并时不时地对其进行一些后台更新,我可以以不同的方式处理这些更新。但是,对于显示数据库数据的活动,我不需要进行任何更新,因此,出于这个原因,我只想从数据库中获取数据,并将该数据“停用”,以便当活动因屏幕方向更改或其他原因而发生配置更改时,我可以再次快速布局活动。停用对象以使其仍可用于我的活动的正确方法是什么。目前我有类似的代码

List<MyObject> mList = db().queryByExample(persistentClass);  // db just gets my ObjectContainer
但它似乎不起作用。我需要遍历列表中的每一项来停用它吗

当你在android上改变屏幕方向时,它会点击我的activity close方法,在这里我关闭数据库。但随后又重新启动,我不想再次填充mList

所以我一直得到一个“
com.db4o.ext.DatabaseClosedException
”异常,因为在我的活动布局中

mList.size()

我真的只想停用对象b/c我永远不必更新它们,我如何才能做到这一点?

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

 List<MyObject> mList = new ArrayList<MyObject>(db().queryByExample(persistentClass)); 
List mList=newarraylist(db().queryByExample(persistentClass));
现在,您不应该获得DatabaseClosedException


然后我只想补充一点,db4o中的“失活”是完全不同的。这与-机制有关。失活与激活相反。激活将对象从数据库加载到内存中。停用使内存中的对象成为一个空外壳,其中没有数据。显式停用仅在特殊情况下对安全内存有用。

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

 List<MyObject> mList = new ArrayList<MyObject>(db().queryByExample(persistentClass)); 
List mList=newarraylist(db().queryByExample(persistentClass));
现在,您不应该获得DatabaseClosedException


然后我只想补充一点,db4o中的“失活”是完全不同的。这与-机制有关。失活与激活相反。激活将对象从数据库加载到内存中。停用使内存中的对象成为一个空外壳,其中没有数据。显式停用仅在特殊情况下对安全内存有用。

啊,很高兴知道,我对停用的理解不正确,谢谢澄清。啊,很高兴知道,我对停用的理解不正确,谢谢澄清。