Я отправил этот еще в мае в группу разработчиков Google [android-developers]. Я никогда не слышал назад и не смог воспроизвести проблему, пока один из моих учеников не сделал на прошлой неделе. Я подумал, что я разместил его здесь и посмотрю, звонит ли он кому-нибудь из колокольчиков.
В одном из моих образцов кода у меня есть следующий метод:
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.<init>(SQLiteProgram.java:56)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteQuery.<init>(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 Programming Tutorials. Он немного разложен и не очень подходит для публикации непосредственно в SO. Вы можете загрузить код для этой книги из приведенной выше ссылки, если хотите взглянуть на нее. Я не помню точно, какой выпуск учебника, над которым работал студент в то время, хотя он был в Tutorial 12-Tutorial 16. Я в основном надеялся столкнуться с тем, кто раньше споткнул об этой проблеме и имел вероятного виновника. Я уверен, что моя база данных открыта. Еще раз спасибо!