0


android.database.sqlite.DatabaseObjectNotClosedException在我正在构建的 PoC Android 应用程序中,当应用程序关闭时调用垃圾收集器时 ,我得到了一个消息。即使我在我正在使用SQLiteDatabaseSQLiteOpenHelper对象上调用 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()数据库读/写是在doInBackgroundAsyncTask 的方法中执行的。

我已经覆盖了以下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();
4

1 回答 1

0

您的光标对象未关闭。每当您完成 Cursor 对象调用cursor.close();

于 2012-05-15T05:47:23.947 回答