Android SQLite DatabaseObjectNotClosedException

时间:2012-05-15 05:39:40

标签: android sqlite sqliteopenhelper


在我正在构建的PoC Android应用程序中,当关闭时在应用程序上调用垃圾收集器时,我得到android.database.sqlite.DatabaseObjectNotClosedException。即使我在SQLiteDatabase以及我正在使用的SQLiteOpenHelper对象上调用close方法,也会发生这种情况。

我正在使用DAO(从AsyncTask.doInBackground的{​​{1}}调用)访问数据库,该DAO包含在构造函数中打开数据库的代码,并且从{{调用此构造函数1}}活动的方法。

Activity

我还有一个方法可以关闭onCreate()以及//Code in my DAO class public MyDataSource(Context context) { dbHelper = new MyOpenHelper(context); dbHelper.createDatabase(); } //Calling Activity MyDataSource myDs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.create); myDs= new MyDataSource (MyActivity.this); } @Override public void onPause() { investmentDs.close(); if(ConstantValues.DebugModeManager.DEBUG_CREATE || ConstantValues.DebugModeManager.DEBUG_MODE) { Log.d(LOG_TAG, "Create screen paused..."); } super.onPause(); } 个对象,这些对象是从同一个活动的SQLiteDatabase方法调用的。数据库读/写是在AsyncTask的SQLiteOpenHelper方法中执行的。

我已覆盖onPause()的{​​{1}}方法,如下所示:

doInBackground

我在DAO课程中用close()方法调用它。

如果需要进一步说明,请告诉我 谢谢,
Debojit

编辑1:
这是从db。

获取的代码
SQLiteOpenHelper

1 个答案:

答案 0 :(得分:0)

您的光标对象未关闭。 无论何时完成Cursor对象,都要调用 cursor.close();