chpil Posté(e) 4 mars 2011 Share Posté(e) 4 mars 2011 Donc, aucun droit en écriture. Probablement que tu n'as pas configuré de SD card pour cet émulateur Dans le 'Android SDK and AVD manager', quand tu affiches les détails de ta configuration émulateur, est-ce que tu as une indication de taille de SD card ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 4 mars 2011 Auteur Share Posté(e) 4 mars 2011 Chpil, voila j'ai essayé autre chose vu que je n'arrive pas à écrire sur le sd card. J'ai crée un fichier dans le package com.projet, grâce à fileoutputstream. voila le code: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); super.onCreate(savedInstanceState); bd = new DBAdapter(this); bd.open(); Cursor cursor1 = bd.ExportPersonne(); try { FileOutputStream fos = this.openFileOutput("test.csv", Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE); DataOutputStream dos = new DataOutputStream(fos); int idIndex = cursor1.getColumnIndexOrThrow("_id"); dos.write(idIndex); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Le problème maintenant est que le fichier test.csv est vide même si sa taille est 1Ko, quand je change int idIndex = cursor1.getColumnIndexOrThrow("nom"); Il m'affiche dans la case du fichier un point d'interogation. Et quand je veux afficher juste "hello word" ça marche: dos.write("Hello World".getBytes());; pour le logcat il n'ya pas d'erreurs. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 4 mars 2011 Share Posté(e) 4 mars 2011 Il ne faut pas utiliser DataOutputStream, c'est pour écrire du binaire, alors que tu veux écrire du texte dans ton fichier Utilise OutputStreamWriter en lieu et place de FileWriter dans le code que je t'avais indiqué précédemment Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 7 mars 2011 Auteur Share Posté(e) 7 mars 2011 J'ai remplacé DataOutputStream par OutputStreamWriter, mais le fichier test.csv reste vide. Je ne sais pas ou est ce qu'il faut placer FileWriter vu qu'il y a déja OutputStreamWriter pour l'ecriture. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 7 mars 2011 Share Posté(e) 7 mars 2011 Il faut changer le type du writer de FileWriter en OutputStreamWriter ! FileOutputStream fos = this.openFileOutput("test.csv", Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE); OutputStreamWriter writer = new OutputStreamWriter(fos); // ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 7 mars 2011 Auteur Share Posté(e) 7 mars 2011 (modifié) Oui c'est ce que j'ai fait. Cursor cursor1 = bd.ExportPersonnes(); try { FileOutputStream fos = this.openFileOutput("test.csv", Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE); OutputStreamWriter dos = new OutputStreamWriter(fos); int idIndex = cursor1.getColumnIndexOrThrow("_id"); dos.write(idIndex); } Modifié 7 mars 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 7 mars 2011 Share Posté(e) 7 mars 2011 Et ? Est-ce que tu comprends ce que tu fais ? As-tu regardé la Javadoc de OutputStreamWriter ? Pourquoi veux-tu sortir dans ton fichier la valeur de idIndex ? idIndex contient le numéro de la colonne "_id" dans le Cursor. C'est un entier. Et un Writer, ça sert à écrire des caractères dans un flux. Dans ton cas, idIndex va valoir quelque chose comme 1 ou 2, et dos.write(idIndex) va écrire dans le fichier le caractère de code 1 ou 2, caractère non imprimable, donc tu ne risques pas de voir grand chose dans ton fichier... Si c'est tester l'écriture dans ton fichier que tu veux faire, fais au moins un dos.write("Ma chaine de caractères de test"); (Je suppose que tu n'as mis qu'un extrait du code de ta méthode, et qu'il y a bien par la suite fermeture de ton flux/ton fichier ( dos.close(); fos.close(); ) ? ) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 7 mars 2011 Auteur Share Posté(e) 7 mars 2011 Et si je veux sortir dans mon fichier les données de la table Personne : id, nom, prénom et âge, je dois faire comment? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 7 mars 2011 Share Posté(e) 7 mars 2011 Je t'ai déjà donné la réponse, il me semble !! Il te suffisait juste d'adapter avec un OutpuStreamWriter au lieu d'un FileWriter Allez, c'est mon jour de bonté : bd = new DBAdapter(this); bd.open(); Cursor cursor1 = bd.ExportPersonnes(); try { FileOutputStream fos = this.openFileOutput("test.csv", Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE); OutputStreamWriter writer = new OutputStreamWriter(fos); int idIndex = cursor1.getColumnIndexOrThrow("_id"); int nomIndex = cursor1.getColumnIndexOrThrow("nom"); int prenomIndex = cursor1.getColumnIndexOrThrow("prenom"); int ageIndex = cursor1.getColumnIndexOrThrow("age"); while (!cursor1.isAfterLast()) { StringBuilder buffer = new StringBuilder(); String idPers = cursor1.getString(idIndex); String nomPers = cursor1.getString(nomIndex); String prenomPers = cursor1.getString(prenomIndex); String agePers = cursor1.getString(ageIndex); buffer.append(idPers); buffer.append(';'); buffer.append(nomPers); buffer.append(';'); buffer.append(prenomPers); buffer.append(';'); buffer.append(agePers); buffer.append("\n"); writer.write(buffer.toString()); cursor1.moveToNext();} } writer.close(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 9 mars 2011 Auteur Share Posté(e) 9 mars 2011 J'ai ces erreurs quand je compile: 03-09 08:23:23.291: ERROR/AndroidRuntime(302): FATAL EXCEPTION: main 03-09 08:23:23.291: ERROR/AndroidRuntime(302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.projet.Projet/com.projet.Projet.Main}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 8 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.os.Handler.dispatchMessage(Handler.java:99) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.os.Looper.loop(Looper.java:123) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.app.ActivityThread.main(ActivityThread.java:4627) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at java.lang.reflect.Method.invokeNative(Native Method) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at java.lang.reflect.Method.invoke(Method.java:521) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at dalvik.system.NativeStart.main(Native Method) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 8 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at com.projet.Projet.Main.onCreate(Main.java:50) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 03-09 08:23:23.291: ERROR/AndroidRuntime(302): ... 11 more as-tu une idée? Merci d'avance. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 9 mars 2011 Share Posté(e) 9 mars 2011 Caused by: android.database.CursorIndexOutOfBoundsException autre ment dit tu as une erreur à la ligne 50 de ta classe Main surement quand tu fait tes getColumnIndexOrThrow v"rifie en mode débug si ton index est valide. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 9 mars 2011 Share Posté(e) 9 mars 2011 Je pense qu'il manque un moveToFirst sur le Cursor (oubli de ma part) Cursor cursor1 = bd.ExportPersonnes(); cursor1.moveToFirst(); ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 9 mars 2011 Auteur Share Posté(e) 9 mars 2011 C'était bien ça, merci beaucoup pour ton aide. juste une dernière question, est ce que c'est possible de récupérer toute la base de donnée donc toutes les tables au même temps. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 9 mars 2011 Share Posté(e) 9 mars 2011 C'est sûrement possible. Soit tu sais faire une requête SQL unique pour récupérer toutes les données de toutes les tables en une seule fois. Soit au pire tu fais plusieurs requêtes, pour les différentes tables Mais, au final, seule toi peut savoir ce qui est possible, en fonction de la façon dont tu vas présenter les données dans le fichier de sortie, et en fonction de la structure de ta base... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 9 mars 2011 Auteur Share Posté(e) 9 mars 2011 Merci encore pour ton aide. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.