【发布时间】:2014-02-02 14:19:29
【问题描述】:
我使用 GreenDao 并为类别创建条目,这非常有效。我的问题是,当我重复该操作时,de.greenrobot.dao.DaoException: Entity is detached from DAO context 失败。 我用 SQLite 调试器查看了数据库,发现 每次 我插入这些条目时,出现了一个 sqlite_sequence 条目。我用我的应用程序“SQLite Debugger”手动删除了它。 之后它就可以工作了。
现在是问题。我怎样才能自动做到这一点?
代码片段
if (category_CategoriesCompaniesQuery == null || category_CategoriesCompaniesQuery.equals(null)) {
QueryBuilder<CategoryCompany> tempQueryBuilder = queryBuilder();
tempQueryBuilder.where(Properties.CategoryID.eq(categoryID));
category_CategoriesCompaniesQuery = tempQueryBuilder.build().forCurrentThread();
} else {
category_CategoriesCompaniesQuery.forCurrentThread().setParameter(0, categoryID);
}
return category_CategoriesCompaniesQuery.forCurrentThread().list();
}
堆栈跟踪
02-04 12:05:38.883: E/AndroidRuntime(23568): java.lang.RuntimeException: 执行 doInBackground() 时出错 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 android.os.AsyncTask$3.done(AsyncTask.java:300) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.FutureTask.setException(FutureTask.java:222) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.FutureTask.run(FutureTask.java:242) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.lang.Thread.run(Thread.java:841) 02-04 12:05:38.883: E/AndroidRuntime(23568): 由: de.greenrobot.dao.DaoException: 实体与 DAO 上下文分离 02-04 12:05:38.883: E/AndroidRuntime(23568): at com.adamasvision.mytermin.model.Category.getCategoriesCompanies(Category.java:152) 02-04 12:05:38.883: E/AndroidRuntime(23568): at com.adamasvision.mytermin.UserState$1.doInBackground(UserState.java:415) 02-04 12:05:38.883: E/AndroidRuntime(23568): at com.adamasvision.mytermin.UserState$1.doInBackground(UserState.java:1) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 android.os.AsyncTask$2.call(AsyncTask.java:288) 02-04 12:05:38.883: E/AndroidRuntime(23568): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
【问题讨论】:
-
请添加您的代码和堆栈跟踪。
-
添加代码和堆栈跟踪
-
您正在尝试解决错误的问题。
sqlite_sequence不是问题。您应该改为修复“实体与 DAO 上下文分离”。有很多关于 SO 的结果。 -
请贴出
getCategoriesCompanies的完整代码。
标签: android sqlite sequence greendao