2011-08-10 2 views
27

que se presente una base de datos SQLite en una tarjeta SD, pero a veces se lanzará la siguiente excepción:SQLiteDiskIOException con código de error 10: error de disco E/S

android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error 

Cualquier sugerencia sobre cómo puedo evitar que esto suceda ?

+4

¿Por qué fue esto downvoted. Estoy interesado en esto también ... – Kurru

+4

Sí, este es un problema real. ¿Alguna ayuda? –

+2

Tengo el mismo problema, pero con el almacenamiento interno, por lo que la respuesta actual no se aplica. – Zitrax

Respuesta

8

Dado que está utilizando Almacenamiento externo, su aplicación debe conocer el estado de Almacenamiento externo, que puede obtener a través del Environment.getExternalStorageState().

Solo debe acceder al Almacenamiento externo cuando el estado es MOUNTED.

Si está intentando abrir un archivo (o SQLite DB;! Es sólo un archivo) durante el inicio del dispositivo, se definitivamente tener problemas, no porque almacenamiento externo es montado hasta bien entrado el arranque del equipo (después de Se muestra la pantalla de inicio).

La manera de salir de esto es registrar un IntentFilter para que se le notifiquen todos los cambios en el estado de Almacenamiento externo, y se comporte como corresponda.

¡Siempre es una buena idea leer la documentación! Consulte la documentación de Android para obtener más información: http://developer.android.com/reference/android/os/Environment.html

¡El uso de almacenamiento externo para este propósito es dudoso, porque no puede controlar cuándo deja de estar disponible! Por ejemplo, el usuario conecta su dispositivo a USB en su computadora y selecciona la opción "Habilitar almacenamiento masivo USB" para que pueda acceder al almacenamiento externo de su dispositivo desde su computadora. ¡Malas noticias! Su aplicación se desconectará del almacenamiento externo, y lo más probable es que no tenga la oportunidad de hacer ningún IO de limpieza.

Con este estado de cosas, ahora se queda con Qué hacer con todos los datos que pondría en su base de datos, si solo estuviera disponible.

Cuestiones relacionadas