【问题标题】:How to use MainActivity's SQLiteDatabase instance in AsyncTask?如何在 AsyncTask 中使用 MainActivity 的 SQLiteDatabase 实例?
【发布时间】:2013-05-31 00:33:30
【问题描述】:

我的MainActivity 中有一个“SQLiteDatabase db”。我初始化它,然后在onCreate()方法中调用AsyncTaskupdateDatabaseTask,如下:

db = databaseHelper.getWritableDatabase();
...
updateDatabaseTask  = new UpdateDatabaseTask();
updateDatabaseTask.execute();

我在updateDatabaseTaskdoInBackground()方法中使用“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


【解决方案1】:

正如 Neaetmul 在上面的评论中指出的那样,我从 onPause()MainActivity 中删除了 databaseHelper.close(),问题就解决了。但是,我还没有弄清楚为什么这条线会导致这样的运行时错误,因为应用程序在我使用它时正在运行......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2016-03-30
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多