我需要在数据库中保存一些对象。我在我的 Dao 类中使用这段代码。
public void saveActions(List<Action> actionList) throws SQLException {
for (Action action : actionList) {
createOrUpdate(action);
}
}
有时我在 createOrUpdate()
函数中有 CursorWindowAllocationException。
有人解决这个问题吗?
最佳答案
如果您查找 CursorWindowAllocationException
的来源,它显示为:
This exception is thrown when a CursorWindow couldn't be allocated, most probably due to memory not being available.
如果您关注堆栈,您会看到调用 com.j256.ormlite.android.AndroidDatabaseConnection.queryForLong
为每个 createOrUpdate
调用创建一个游标。
所以这里可能发生的情况是,在释放内存之前创建了太多的 Cursors
。
您应该在 transaction 中执行这些调用,或者更好的是,使用 batch tasks .例如
actionDao.callBatchTasks(new Callable<Void>() {
public Void call() throws SQLException {
for (Action action : actionList) {
actionDao.createOrUpdate(action);
}
return null;
}
});
关于android - 标准 ORMLite 方法中的 CursorWindowAllocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639242/