Исключение: попытка получить ссылку на закрытый SQLiteClosable
Я отправилэтот Еще в мае на [Android-разработчики] Google Group. Я никогда не слышал и не мог воспроизвести проблему, пока один из моих учеников не сделал на прошлой неделе. Я понял, что яЯ бы опубликовал это здесь и посмотрел, звонил ли он кому-нибудь.
В одном из моих примеров кода у меня есть следующий метод:
static Cursor getAll(SQLiteDatabase db, String orderBy) {
return(db.rawQuery("SELECT * FROM restaurants "+orderBy, null));
}
Когда я запускаю его, время от времени я получаю это:
05-01 14:45:05.849: ERROR/AndroidRuntime(1145):
java.lang.IllegalStateException: attempt to acquire a reference on a
close SQLiteClosable
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:31)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:56)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:49)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1118)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1092)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
apt.tutorial.Restaurant.getAll(Restaurant.java:14)
Это не имеет смысла для меня. База данных определенно открыта.SQLiteClosable
этоSQLiteQuery
созданоSQLiteQueryDriver
и я не вижу доказательств того, что здесь есть пул объектов или что-то, что могло бы объяснить, какновый» SQLiteClosable
уже закрыт. Тот факт, что он является спорадическим (имеется в виду, что одни и те же операции пользовательского интерфейса иногда вызывают исключение, но не всегда), наводит на мысль о каком-то пуле, состоянии гонки или о чем-то ... но яЯ не уверен, где.
Мысли?
Спасибо!
ОБНОВИТЬ: Данный код взят из учебников LunchList из моегоРуководства по программированию на Android книга. Это'Это немного распространено и не очень подходит для публикации непосредственно в SO. Вы можете скачать код этой книги по приведенной выше ссылке, если хотите посмотреть на нее. Я не помню точно, над каким выпуском учебника в то время работал студент, хотя это было в диапазоне Tutorial 12-Tutorial 16. В основном я надеялся встретить кого-то, кто раньше сталкивался с этой проблемой и имел вероятного виновника. Я'Я уверен, что моя база данных открыта. Еще раз спасибо!