База данных LEAK, при фотографировании. База данных SQLite создана и никогда не закрывается. Android, Java, SQLite - PullRequest
0 голосов
/ 18 августа 2010

Привет еще раз. У меня небольшая проблема при фотографировании. У меня есть кнопка, которая вызывает камеру, успешно делает фотографию и возвращается к моей форме ввода. Моя единственная проблема - утечка базы данных, которая возникает при нажатии кнопки для вызова камеры. Мой код выглядит примерно так.

public void takephoto(){

        Intent in = new
        Intent(this, takephoto.class);
        startActivityForResult(in,1);
    }

Вот фрагмент того, как открывается база данных:

 public journalDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

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

Я бегу:

mDbHelper = new journalDbAdapter(this);
        mDbHelper.open();

В onCreate действия или класса, в который я вызываю камеру. Я не кодировал mDbHelper.close (); нигде не уверен, если я должен когда или где. Я думаю, что я бы предпочел просто оставить его открытым, снимая одно изображение.

Logcat:

08-17 21:33:37.582: ERROR/Database(18297): java.lang.IllegalStateException: /data/data/com.growjournal.beta/databases/grower SQLiteDatabase created and never closed
08-17 21:33:37.582: ERROR/Database(18297):     at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1785)

С какими возможными проблемами я мог бы столкнуться, если бы это никогда не было исправлено ??

Кажется, все работает нормально, но я бы хотел избежать любых проблем со многими устройствами на Android.

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Вы получаете эту ошибку, потому что приложение камеры - огромная проблема с памятью и, скорее всего, вызывает закрытие вашего приложения, а не просто делает паузу. Вы должны сохранить свои записи и закрыть базу данных в onPause и снова открыть ее в onResume и / или onCreate.

0 голосов
/ 18 августа 2010

Я думаю, что вы пропустили эту строку

mDb.close();
...