SQLite
 sql >> Database >  >> RDS >> SQLite

SQLiteDiskIOException con codice di errore 10:errore di I/O del disco

Poiché stai utilizzando l'archiviazione esterna, l'applicazione deve essere a conoscenza dello stato dell'archiviazione esterna, che puoi ottenere tramite Environment.getExternalStorageState() .

Devi accedere alla memoria esterna solo quando lo stato è MOUNTED .

Se stai cercando di aprire un file (o SQLite DB; è solo un file!) durante l'avvio del dispositivo, lo farai sicuramente hanno problemi, perché la memoria esterna non è montata fino all'avvio del dispositivo (dopo la visualizzazione della schermata iniziale).

La via d'uscita è registrare un IntentFilter per essere informato di tutte le modifiche allo stato di archiviazione esterna e comportarsi di conseguenza.

È sempre una buona idea leggere la documentazione! Consulta la documentazione di Android per i dettagli:http://developer.android.com/reference/android/os/Environment.html

L'uso dell'archiviazione esterna per questo scopo è dubbio, perché non puoi controllare quando diventa non disponibile! Ad esempio, l'utente collega il proprio dispositivo all'USB del proprio computer e seleziona l'opzione "Abilita archiviazione di massa USB", in modo da poter accedere all'archivio esterno del proprio dispositivo dal proprio computer. Cattive notizie! La tua app verrà disconnessa dall'archiviazione esterna e molto probabilmente senza l'opportunità di eseguire operazioni di pulizia IO!

Con questo stato di cose, ora ti rimane cosa fare con tutti i dati che inseriresti nel tuo database, se solo fossero disponibili.