【发布时间】:2013-05-31 00:33:30
【问题描述】:
我的MainActivity 中有一个“SQLiteDatabase db”。我初始化它,然后在onCreate()方法中调用AsyncTaskupdateDatabaseTask,如下:
db = databaseHelper.getWritableDatabase();
...
updateDatabaseTask = new UpdateDatabaseTask();
updateDatabaseTask.execute();
我在updateDatabaseTask的doInBackground()方法中使用“db”如下:
Cursor c = db.query(...);
但是我得到了这个错误:
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase
我们不应该一开始就初始化一个数据库实例,并能够在不同的任务、功能等中使用它吗?
【问题讨论】:
-
除非活动被破坏,否则不要关闭数据库。如果即使在 Activity.onDestroy() 中也从不关闭 db 对象,那也没关系,因为 db 只是一个句柄。如果您的应用程序无误关闭,则 db 将被操作系统自动关闭。
-
你能把doInBackground的完整代码贴出来
-
我从
onPause()的MainActivity中删除了databaseHelper.close(),问题似乎已经解决了:) 谢谢。
标签: android sqlite android-asynctask