Aller au contenu

[Problème] Ecriture d'un fichier .txt pendant un temps indéterminé


El_Momo

Recommended Posts

Bonjour tout le monde, tout d'abord je tiens à préciser que je suis nouveau sur ce forum, donc si je fais quelque chose qui n'est pas en règle n’hésitez pas à me le préciser. :)

Je suis actuellement en train d'essayer de développer une application qui permettrait d'écrire dans un fichier txt toutes les valeurs de capteurs (Gyroscope, Accéléromètre etc... + GPS) à chaque secondes pendant un temps indéterminé.

Le but étant que lorsque l'utilisateur appui sur un bouton START, cela lance la sauvegarde des valeurs pendant un temps indéterminé et que cette enregistrement s'arrête lorsque l'utilisateur appui sur un bouton STOP (et donc que la fermeture du .txt se fasse au même moment).

Et c’est là que mon problème se pose, j’ai tenté de réaliser cette fonction avec un thread (lorsque l’utilisateur appui sur START ) de cette manière :

private void EnregistrementDesDonnees() {

new Thread(new Runnable() {

public void run() {

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))

{

try { // catches IOException below

FileWriter sdDATA = new FileWriter (Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator + "DATA.txt");

int i = 0;

while(i<30)

{

if (GPS != null)

{

sdDATA.write("\tGPS : " + GPS +"\t");

}

else

sdDATA.write("GPS INTROUVABLE\t ");

sdDATA.write("Gyro_x :"+GAx+ "\t" + "Gyro_y :" + GAy + "\t" + "Gyro_z :" + GAz + "\t" + "Accel_x :"+AAx+ "\t" + "Accel_y :" + AAy + "\t" + "Accel_z :" + AAz + "\t" + "Orient_Azimuth :"+OA+ "\t" + "Orient_Pitch :" + OP + "\t" + "Orient_Roll :" + OR + "\t" + "Magn_x :"+MAx+ "\t" + "Magn_y :" + MAy + "\t" + "Magn_z :" + MAz + "\t");

// Thread en pause pendant une seconde

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

Thread.currentThread().interrupt();

}

i++;

}

//fermeture du fichier

sdDATA.flush();

sdDATA.close();

}

catch (IOException ioe) {

ioe.printStackTrace();

}}}).start();

Dans ce cas-là, je suis obligé d’imposé un temps prédéfini (ici 30 secondes dans ma boucle while), et donc l’arrêt du thread se fait naturellement au bout de 30 s et non lorsque l’utilisateur le décide, ce qui ne convient pas… et si je tente de fermer le thread via un bouton, alors cela interrompt brutalement le thread et donc ne ferme pas bien mon fichier .txt…

Est-ce que quelqu’un aurait une idée et pourrais me donner une piste pour réaliser cette fonction s’il vous plait. Serait-il plus approprié d’utilisé un service ? Ou une autre méthode ?

Merci d’avance pour vos réponses :D

Lien vers le commentaire
Partager sur d’autres sites

Il te faut utiliser le mécanisme d'interruption des threads. Plutot que d'itérer sur une variable pour ta boucle dans ton thread, tu peux utiliser la condition isInterrupted()

 while (!Thread.currentThread().isInterrupted()) {
   ...
   Thread.sleep();
 }
 catch (InterruptedException e) {
   // traitement à effectuer en cas d'interruption du thread
 }

et pour arrêter ton thread, il te suffit d'appeler, depuis l'ihm, la méthode interrupt sur celui-ci (il te faut avoir garder une référence sur le thread pour cela)

monThread.interrupt();

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...