Aller au contenu

Accés aux données


Recommended Posts

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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);

   // ...

Lien vers le commentaire
Partager sur d’autres sites

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é par nathalie85
Lien vers le commentaire
Partager sur d’autres sites

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(); ) ? )

Lien vers le commentaire
Partager sur d’autres sites

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();
       }

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...