SQLCipher - Завершение курсора, который не был деактивирован ошибка - PullRequest
1 голос
/ 29 декабря 2011

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

 12-29 11:37:54.329: E/Cursor(10837): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.company.myapp/databases/data, table = data_table, query = SELECT rowid, data FROM data_table
 12-29 11:37:54.329: E/Cursor(10837): info.guardianproject.database.sqlcipher.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteCursor.<init>(SQLiteCursor.java:225)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1410)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1289)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1243)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1325)
 12-29 11:37:54.329: E/Cursor(10837):   at com.company.appName.DatabaseManager.queryAllItems(DatabaseManager.java:105)

Я думал, что эта ошибка произойдет, только если я забуду закрыть Cursor после того, как я закончу его использовать, но мне кажется, что я получаю эту ошибку даже до того, как смогу ее использовать.

Вот код, который используется в методе queryAllItems():

public Cursor queryAllItems() {
    return database.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_DATA}, null, null, null, null, null);
}

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Трассировка стека ввела меня в заблуждение, и оказалось, что мне нужно просто вызвать Cursor.deactivate() и Cursor.close() после того, как все мои операции над запросом были выполнены.

0 голосов
/ 30 декабря 2011

После создания курсора, если вы позвоните startManagingCursor(c);, это решит проблему.Здесь «c» - ссылка на курсор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...