2011-08-10 1 views
27

je me suis déplacé une base de données SQLite sur une carte SD, mais parfois il va jeter l'exception suivante:SQLiteDiskIOException avec le code d'erreur 10: erreur E/S disque

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

Toutes les suggestions sur la façon dont je peux empêcher que cela se produise ?

+4

Pourquoi était-ce downvoted. Suis intéressé par cela aussi ... – Kurru

+4

Oui, c'est un vrai problème. De l'aide? –

+2

J'ai le même problème, mais avec le stockage interne de sorte que la réponse actuelle ne s'applique pas. – Zitrax

Répondre

8

Étant donné que vous utilisez Stockage externe, votre application doit connaître l'état de stockage externe, que vous pouvez obtenir via Environment.getExternalStorageState().

Vous ne devez accéder au stockage externe que si l'état est MOUNTED.

Si vous essayez d'ouvrir un fichier (ou SQLite DB;! Il est juste un fichier) lors du démarrage de l'appareil, vous aurez certainement ont des problèmes, parce que stockage externe est pas monté jusque dans le démarrage de l'appareil (après L'écran d'accueil est affiché).

La sortie de ceci est d'enregistrer un IntentFilter pour être averti de tous les changements dans l'état de stockage externe, et se comporter en conséquence. C'est toujours une bonne idée de lire la documentation! Consultez la documentation Android pour plus de détails:

L'utilisation du stockage externe à cette fin est douteuse, car vous ne pouvez pas contrôler quand il devient indisponible! Par exemple, l'utilisateur branche son périphérique sur le port USB de son ordinateur et sélectionne l'option «Activer le stockage de masse USB» pour accéder au stockage externe de son périphérique à partir de son ordinateur. Mauvaises nouvelles! Votre application sera déconnectée du stockage externe, et très probablement sans avoir l'occasion de faire des opérations de nettoyage!

Avec cet état de choses, vous êtes maintenant à gauche avec Que faire avec toutes les données que vous souhaitez mettre dans votre base de données, si seulement il était disponible.

Questions connexes