Inicio » Android » Cursor already closed

Cursor already closed

¿Te sale este error cuando intentas cambiar el cursor de tu adapter?

java.lang.RuntimeException: Unable to resume activity …
java.lang.IllegalStateException: trying to requery an already closed cursor android.database.sqlite.SQLiteCursor

Parece que la gestion de los cursores de SimpleCursorAdapter ha cambiado en las versiones SDK > 11.

Si usas un adapter SimpleCursorAdapter para provisionar tu ListView, y has delegado la gestión del cursor al Activity haciendo startManagingCursor es posible que si cambias el cursor del adapter con changeCursor, te de un error de cursor actualmente cerrado…

Algo así como:

//Inicializamos el adapter en el constructor usando un cusor nulo
SimpleCursorAdapter mCursor = SimpleCursorAdapter(Context, int, Cursor, String[], int[])

[...]
//Presentamos los datos consultando la BBDD
Cursor productosCursor = mListaCompraDao.fetchAllProductosSeleccionados(listActive)
startManagingCursor(productosCursor);
mCursor.changeCursor(productosCursor);

Pues este código, que funciona perfectamente en versiones de SDK < 11 da un error cuando se retoma el activity, por ejemplo lanzando un subactivity y volviendo luego a este.

Para que funcionen en veresiones superiores, hay que quitarle la gestion del cursor antiguo al activity antes de cambiarlo al nuevo.

Algo así como:

if(mCursor.getCursor() != null){
stopManagingCursor(mCursor.getCursor());
mCursor.getCursor().close();
}
//Y ya podemos asignarle el nuevo cursor
startManagingCursor(productosCursor);
mCursor.changeCursor(productosCursor);

¿Te ha gustado? Compártelo!! 😀

Anuncios

2 pensamientos en “Cursor already closed

  1. Gracias, es exactamente lo que me está pasando, infelizmente no funcionó en mi caso, debo considerar algo mas si trabajo con fragments?, sinceramente, ya probé todo, e intenté hacerlo con loaders pero no logro hallar el uri de mi database..

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s