我需要在数据库中保存一些对象。我在我的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;
    }
});

07-24 09:29