android.database.sqlite.DatabaseObjectNotClosedException
在我正在构建的 PoC Android 应用程序中,当应用程序关闭时调用垃圾收集器时
,我得到了一个消息。即使我在我正在使用SQLiteDatabase
的SQLiteOpenHelper
对象上调用 close 方法,也会发生这种情况。
我正在使用包含用于在构造函数中打开数据库的代码的 DAO(从 anAsyncTask.doInBackground
中调用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
对象的方法,该方法是从同一活动的方法中SQLiteOpenHelper
调用的。onPause()
数据库读/写是在doInBackground
AsyncTask 的方法中执行的。
我已经覆盖了以下close()
方法SQLiteOpenHelper
:
@Override
public synchronized void close() {
if(database != null)
database.close();
super.close();
}
我从close()
我的 DAO 类中的一个方法中调用它。
如果需要进一步澄清,请告诉我。
谢谢,
德博吉特
编辑 1:
这是从 db 获取的代码。
cursor = db.query("EMPLOYEES", null, whereClause, null, null, null, "EMPLOYEE_ID");
cursor.moveToFirst();
List<MyBean> beans = new ArrayList<MyBean>();
while(!cursor.isAfterLast()) {
beans.add(cursorToObject(cursor)); //this fetches data from the cursor's current row
cursor.moveToNext(); // and inserts into a POJO of type MyBean
}
cursor.close();