mardi 20 novembre 2007

Problème pour créer/utiliser votre DB?

Une petite astuce qui vous évitera de perdre du temps comme j'ai pu en perdre...

Dimanche, j'ai fait mon code pour créer une base de données sqlite en créant une table et en injectant quelques données. Super content :)
Lundi, je lance l'application: NullPointerException! et toute la journée il m'a été impossible de créer ma Db avec le même code et malgré des dizaines de manipulations! Le truc incompréhensible :(

Hier soir, j'ai suprimé le folder /data/data/com.google.android.TestDb, qui était censé contenir ma base de données. Bien que ce folder est été vide, je ne pouvais pas écrire de données à l'intérieur. Juste après, j'ai fait tourner mon code de création de base et là tout à fonctionner!

Je n'arrive pas trés bien à comprendre la raison, mais j'ai plusieurs hypothèses:
- un lock sur la base de données (mais quelle base puisque le répertoire était vide!)
- un lock sur le répertoire après une mauvaise fermeture de l'application ou de l'émulateur
- un changement de propriétaire (à la manière de Linux, le répertoire dispose d'un propriétaire et d'un groupe d'appartenance correspondant au numéro de l'application installée: ex. app6 si votre application correspond à la 6ème application installée sur l'appareil). Ainsi, en modifiant mon code ou une variante du code, et un redéploiement de l'application sur l'émulateur à modifier le propriétaire. Comme le nom de la classe et donc du folder était le même, mais que l'utilisateur ne correspondait il m'était impossible d'y écrire.

La suppression du répertoire se fait via l'utilitaire adb qui se trouve dans le répertoire tools du SDK.

Lancez votre émulateur
Lancez un fenêtre cmd (on supposera ici que nous sommes sous Windows!)
Placez vous dans le répertoire qui contient votre sdk android puis dans tools
Saisissez la la commande suivant adb shell
Vous vous retrouver alors devant une fenêtre, dont la ligne commande par # à la manière d'un shell standard Unix.
placez vous dans le répertoire /data/data grâce à la commande cd data/data

Tapez la commande ls afin de liste le contenu du répertoire et d'y repérer le package de votre application
Ensuite supprimer le répertoire des données de votre application par la commande
rm -r

Ceci ne supprimera que les données de votre application et non votre application qui se situe dans le répertoire /data/app

Aucun commentaire: