gpt4 book ai didi

java - android db4o 正确停用对象

转载 作者:行者123 更新时间:2023-12-01 19:20:10 25 4
gpt4 key购买 nike

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

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

我尝试过做这样的事情

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

但它似乎不起作用。我需要迭代列表中的每个项目来停用它吗?

当您更改 Android 上的屏幕方向时,它会触发我关闭数据库的 Activity 关闭方法。但随后又重新启动,我不想再次填充 mList。

所以我不断收到“com.db4o.ext.DatabaseClosedException”异常,因为在我的 Activity 布局中我做了类似的事情

mList.size()

我真的只是想停用对象,因为我永远不需要更新它们,我该怎么做?

最佳答案

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

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

现在您不应该收到 DatabaseClosedException。

然后我只想补充一点,db4o 中的“停用”是完全不同的东西。它与 Activation 有关。 -机制。停用与激活相反。激活将对象从数据库加载到内存中。停用会使内存中的对象变成一个空壳,其中没有数据。显式停用仅对特殊场景有用,以确保内存安全。

关于java - android db4o 正确停用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com