it-swarm-ru.tech

Приложение не закрывало курсор или объект базы данных, который был открыт здесь:

Мой код:

public class EventDataSQLHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "my.db";
}

public class Test extends Activity {
    EventDataSQLHelper eventsData;

    @Override
    protected void onDestroy() {
        System.out.println("onDestroy");

        close();
        if (db!=null){

        db.close();

    }
    super.onDestroy();
}




public void close() {
    eventsData.close();
}

Я закрыл базу данных здесь .. Во всех моих действиях, кроме этой, она работает (исключение не отображается). Здесь, когда я нажимаю кнопку "Назад" из этого теста, выдается следующее исключение.

02-14 15:59:34.642: ERROR/Database(535): close() was never explicitly called on database '/data/data/com.tesy.connect/databases/test.db' 
02-14 15:59:34.642: ERROR/Database(535): Android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
02-14 15:59:34.642: ERROR/Database(535):     at Android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.Java:1810)
02-14 15:59:34.642: ERROR/Database(535):     at Android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.Java:817)
02-14 15:59:34.642: ERROR/Database(535):     at Android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.Java:851)
02-14 15:59:34.642: ERROR/Database(535):     at Android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.Java:844)
02-14 15:59:34.642: ERROR/Database(535):     at Android.app.ContextImpl.openOrCreateDatabase(ContextImpl.Java:540)
02-14 15:59:34.642: ERROR/Database(535):     at Android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.Java:203)
02-14 15:59:34.642: ERROR/Database(535):     at Android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.Java:98)
02-14 15:59:34.642: ERROR/Database(535):     at Android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.Java:158)
02-14 15:59:34.642: ERROR/Database(535):     at com.connect.Test.getEvents(Connect_EY.Java:755)
02-14 15:59:34.642: ERROR/Database(535):     at com.connect.Test.onCreate(Connect_EY.Java:662)
02-14 15:59:34.642: ERROR/Database(535):     at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
02-14 15:59:34.642: ERROR/Database(535):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2627)
02-14 15:59:34.642: ERROR/Database(535):     at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2679)
02-14 15:59:34.642: ERROR/Database(535):     at Android.app.ActivityThread.access$2300(ActivityThread.Java:125)
02-14 15:59:34.642: ERROR/Database(535):     at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:2033)
02-14 15:59:34.642: ERROR/Database(535):     at Android.os.Handler.dispatchMessage(Handler.Java:99)
02-14 15:59:34.642: ERROR/Database(535):     at Android.os.Looper.loop(Looper.Java:123)

Исключение выдается в этой строке getEvents:

public class Test extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.pageview);

    startRefreshActivity();
    try { /* If No Record Exists Create a New One */
    eventsData = new EventDataSQLHelper(this);
    Cursor cursor = getEvents();
    startManagingCursor(cursor);

    } 
}

private Cursor getEvents() {
    try {
    db = eventsData.getReadableDatabase();
    Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null,
        null, null, null, null);
    startManagingCursor(cursor);
    return cursor;
} catch (Exception ex) {
    System.out.println("Exception Occured : " + ex.toString());
    return null;
}

}

Исключение:

02-14 15:59:34.642: ERROR/Database(535):     at com.testconnect.Test.getEvents(Test.Java:755)
02-14 15:59:34.642: ERROR/Database(535):     at com.testconnect.Test.onCreate(Test.Java:662)
11
MorningGlory

Я разрешил исключение. Я звонил

 db = eventsData.getReadableDatabase(); 

дважды, поэтому выбрасывается исключение

6
jennifer

Ты пробовал:

     Cursor cursor = getEvents();
     startManagingCursor(cursor);
     cursor.close();

?

1
Nemanja Boric

Вы пробовали после передачи возвращаемого значения закрыть курсор как cursor.close

  private Cursor getEvents() {
     try {
            db = eventsData.getReadableDatabase();
            Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null,
             null, null, null, null);
            startManagingCursor(cursor);
            cursor.close();
            return cursor;

         } catch (Exception ex) {
              System.out.println("Exception Occured : " + ex.toString());
              return null;
      }
1
NagarjunaReddy