我需要在数据库中保存一些对象。我在我的 Dao 类中使用这段代码。
public void saveActions(List<Action> actionList) throws SQLException {
for (Action action : actionList) {
createOrUpdate(action);
}
}
有时我会遇到 CursorWindowAllocationExceptioncreateOrUpdate()
功能。
有人有这个问题的解决方案吗?
如果你查找来源CursorWindowAllocationException
上面写着:
当无法分配 CursorWindow 时抛出此异常,
最有可能是由于内存不可用。
如果你跟踪堆栈,你会看到调用com.j256.ormlite.android.AndroidDatabaseConnection.queryForLong
正在为每个创建一个光标createOrUpdate
call.
所以这里可能发生的情况是有太多Cursors
在释放内存之前创建。
您应该在交易 http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_5.html#Transactions,或者更好的是,使用批处理任务 http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_5.html#callBatchTasks. E.g.
actionDao.callBatchTasks(new Callable<Void>() {
public Void call() throws SQLException {
for (Action action : actionList) {
actionDao.createOrUpdate(action);
}
return null;
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)