IllegalStateException - SQLiteClosable.acuireReference - PullRequest
0 голосов
/ 02 октября 2018

У меня проблема, похожая на этот вопрос.

В настоящее время я вставляю данные в свою базу данных SQLite следующим образом:

private Context context;
private SQLiteDatabase database;
private SQLiteHelper dbHelper;

public DBManager open() throws SQLException {
    this.dbHelper = new SQLiteHelper(context);
    this.database = this.dbHelper.getWritableDatabase();
    return this;
}

public void close() {
    this.dbHelper.close();
}

void insertThumb(String _id, String thumbPath, String videoPath) {
    ContentValues contentValue = new ContentValues();
    contentValue.put(SQLiteHelper._ID, _id);
    contentValue.put(SQLiteHelper.THUMB_PATH, thumbPath);
    contentValue.put(SQLiteHelper.VIDEO_PATH, videoPath);
    this.database.insert(SQLiteHelper.TABLE_NAME_THUMBNAIL, null, contentValue);
}

Мой SQLiteHelper extends SQLiteOpenHelper.

Я открываю свою базу данных в OnCreate своей Деятельности, когда я хочу вставить в свою базу данных следующий вызов:

dbManager.insertThumb(String.valueOf(_id), newFile.getPath(), directoryToStore + "/" + fileName);

Я закрываю базу данных, когда я закончу сЗадание (OnBackPressed, OnDestroy).


Глядя на вопрос, указанный выше, в принятом ответе говорится:

use a SQLiteOpenHelper and call getWritableDatabase() every time you need one.

I 'я делаю это, не так ли?


Второй ответ говорит:

SQLiteDatabase is closed automatically under some conditions.

Должен ли я тогда открыть базу данных, когда она мне понадобится, и закрыть еесразу после того, как я закончил?Вот так -

dbManager.open();
dbManager.insertThumb(String.valueOf(_id), newFile.getPath(), directoryToStore + "/" + fileName);
dbManager.close();

Может кто-нибудь сказать, пожалуйста, как лучше всего избегать этой проблемы?

...