我需要在数据库中保存一些对象。我在我的Dao类中使用此代码。
public void saveActions(List<Action> actionList) throws SQLException {
for (Action action : actionList) {
createOrUpdate(action);
}
}
有时我在
createOrUpdate()
函数中有CursorWindowAllocationException。有人能解决这个问题吗?
最佳答案
如果您查找CursorWindowAllocationException
的来源,则会显示:
如果遵循堆栈,您将看到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;
}
});