2012-05-15 1 views
0


В приложении PoC для Android, которое я создаю, я получаю android.database.sqlite.DatabaseObjectNotClosedException, когда сборщик мусора вызывается в приложении при закрытии. Это происходит даже тогда, когда я вызываю метод close как для SQLiteDatabase, так и для объектов SQLiteOpenHelper, которые я использую.Android SQLite DatabaseObjectNotClosedException

Я доступ к БД с помощью DAO (так называемой от AsyncTask.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.

Пожалуйста, дайте мне знать, если потребуется дополнительное разъяснение.
Спасибо,
Debojit

EDIT 1:
Это код для выборки из БД.

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(); 

ответ

0

Ваш объект курсора не закрыт. Всякий раз, когда вы закончили с вызовом объекта курсора cursor.close();

+0

Я закрываю курсор _immediately_ после того, как я беру данные и загружаю их в 'ArrayList'. – Debojit

 Смежные вопросы

  • Нет связанных вопросов^_^