Excepción: intentar adquirir una referencia en un SQLiteClosable cercano

publiquéesta en mayo en el grupo de Google [desarrolladores de Android]. Nunca volví a escuchar y no pude reproducir el problema hasta que uno de mis alumnos lo hizo la semana pasada. Pensé que lo publicaría aquí y vería si sonaba alguna campana para alguien.

En uno de mis ejemplos de código, tengo el siguiente método:

static Cursor getAll(SQLiteDatabase db, String orderBy) {
        return(db.rawQuery("SELECT * FROM restaurants "+orderBy, null));

}

Cuando lo ejecuto, esporádicamente, me sale esto:

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)

Esto no tiene ningún sentido para mí. La base de datos está definitivamente abierta. losSQLiteClosable es elSQLiteQuery creado porSQLiteQueryDriver, y no veo evidencia de que haya un conjunto de objetos o algo que esté sucediendo aquí que pueda explicar cómo un "nuevo"SQLiteClosable ya está cerrado El hecho de que sea esporádico (lo que significa que las mismas operaciones de UI a veces desencadenan la excepción, pero no siempre) sugiere algún tipo de grupo, condición de carrera o algo ... pero no estoy seguro de dónde.

¿Pensamientos?

¡Gracias!

ACTUALIZAR: El código en cuestión es de los tutoriales de LunchList de miTutoriales de programación para Android libro. Está un poco extendido y no es terriblemente adecuado para publicar directamente en SO. Puede descargar el código de ese libro desde el enlace anterior si desea echarle un vistazo. No recuerdo exactamente en qué edición del tutorial estaba trabajando el estudiante en ese momento, aunque estaba en el rango Tutorial 12-Tutorial 16. En su mayor parte esperaba encontrar a alguien que se había tropezado con este problema antes y tenía un posible culpable. Estoy bastante seguro de que mi base de datos está abierta. ¡Gracias de nuevo!

Respuestas a la pregunta(4)

Su respuesta a la pregunta