No se puede reanudar el error de actividad

Mi actividad contiene este código para obtener todas las imágenes de la tarjeta SD:

String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.ImageColumns.DATA}; Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media._ID); int count = cursor.getCount(); int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA); int i; for(i = 0; i < count; i++) { cursor.moveToPosition(i); String p = cursor.getString(image_path_index); fd.addToPhonePhoto(p); } cursor.close(); 

Ocurrió mientras se reanudaba la Actividad:

03-14 14: 06: 48.380: E / AndroidRuntime (20793): java.lang.RuntimeException: No se puede reanudar la actividad {}: java.lang.RuntimeException: No se puede reanudar la actividad {}: android.database.StaleDataException: Se ha intentado Acceder a un cursor después de haber sido cerrado.

Solo ocurre en Android 4.0. Si en Android 2.x o 3.x, funciona normalmente. Pero si cambio la configuración del sistema que selecciona la opción "no mantener actividades" en "Opciones de desarrollador". El error no se muestra.

Quiero modificar mi código para evitar este error sin cambiar la configuración del sistema. ¿Cómo debo hacerlo?

Creo que esto es debido a la llamada managedQuery + que cierre el cursor. Desde los documentos del método managedQuery() :

Advertencia: No llame a close () en un cursor obtenido usando este método, porque la actividad lo hará por usted en el momento apropiado. Sin embargo, si llama a stopManagingCursor (Cursor) en un cursor de una consulta administrada, el sistema no cierra automáticamente el cursor y, en ese caso, debe llamar a close ().

Deje el cursor para que el sistema Android administre y no llame a cursor.close(); .

Note: El método managedQuery está obsoleto y debe evitarse , implementar CursorLoaders en CursorLoaders lugar. Más información acerca de CursorLoaders se puede encontrar en developer.android.com .

La función, managedQuery () está obsoleta.

Por favor use getContentResolver (). Query ().

Los parámetros son los mismos.

Eliminar cursor.close(); En tu código funciona bien definitivamente

  • ¿Cómo se obtiene el tipo de un cursor?
  • Método startManagingCursor (cursor) obsoleto
  • Obtener el nombre y el correo electrónico de la lista de contactos es muy lento
  • EditText en ListView sin reciclar entrada
  • Cursor Wrapping / Unwrapping en ContentProvider
  • ¿Cómo recuperar datos de un cursor en android?
  • Android: filtrar un SimpleCursorAdapter ListView
  • Android Edit Text Cursor no aparece
  • ¿Cuál es el uso de moveToFirst () en cursores SQLite
  • ¿Por qué cursorLoader no notificó cambios en los datos de origen?
  • Obtener el número de teléfono de la URI de búsqueda
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.