IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

mecanisme récupération valeur Thread


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut mecanisme récupération valeur Thread
    Bonjour,

    J'ai crée une AlertDialog dans lequel je saisi une String puis je valide sur ok.
    Ce String est sauvegardé dans SharedPreference
    Ensuite je lance un Thread qui prend en compte ce string en la récupérant dans les SharedPreferences.

    Ce que je souhaiterais effectuer, c'est:

    Lors du rappel de l'affichage de l'AlertDialog afin de saisir une nouvelle String puis valider sur OK. -> faire appel au Thread en prenant en compte immédiatement la valeur de SharePreference modifié.


    Merci.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    alert.setPositiveButton(
      android.R.string.ok,
      new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
          String value = input.getText().toString();
          MaClasse.MACHAINE = value;
          getSharedPreferences("machaine", ODE_PRIVATE).edit().putString("machaine", value).commit();
        }
      });
    alert.show();


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    public class MonThread extends Thread {
     
    @Override
    public void run() {
      while (getSharedPreferences("machaine", MODE_PRIVATE).getString(
    					"machaine", null) == null) {
        // to do nothing wait a shared preferences saved
      }
     
     
      while (true) {
        try {
          Thread.sleep(5000);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        if(getSharedPreferences("machaine",MODE_PRIVATE).getString("machaine", null) != null) {
          traitement();			
        }
      }
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Bonjour,

    J'ai un peu de mal à voir ce que vous voulez faire, mais pourquoi ne pas utiliser un OnSharedPreferenceChangeListener afin de savoir quand la valeur a été modifié ?

    http://developer.android.com/referen...eferences.html

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Comment fonctionne synchronized?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Le mot clé synchronized permet seulement de gérer la concurrence d'accès entre différent Thread à un même objet/méthode.

    D'après ce qu'on voit dans le code tu boucles pour savoir quand la donnée est modifié, du coup en mettant un listener sur le SharedPrefrence, au changement de valeur le traitement pourra être effectué, du coup plus de boucle et un thread lancé que quand nécessaire.

    Pour synchronized cf dernier post de ce sujet http://www.developpez.net/forums/d10...ion-exception/

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Je souhaitais mettre en place ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    					public void onSharedPreferenceChanged(
    							SharedPreferences prefs, String key) {
    						// Implementation
    					}
    				};
    				getSharedPreferences("machaine", MODE_PRIVATE)
    						.registerOnSharedPreferenceChangeListener(listener);
    Le problème c'est que mon Thread est lancé; je ne vois pas comment la méthode traitement prendra en compte le changement.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    j'ai mis en place cela pour que le traitement ne peut s'effectuer si l'un ou l'autre thread accède à ma donnée:

    Dans l'alertDialog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    synchronized (getSharedPreferences("machaine",MODE_PRIVATE)){
     getSharedPreferences("machaine", ODE_PRIVATE).edit().putString("machaine", value).commit();
     
    }
    Dans le while du Thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    synchronized (getSharedPreferences("machaine",MODE_PRIVATE)){
    traitement();
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème récupération valeur d'un "div"
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/06/2005, 10h04
  2. Pb avec les checkbox: tout sélectionner,récupération valeurs
    Par bubble_gum dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/10/2004, 17h42
  3. [Débutant][JSP]Récupération valeur de checkbox
    Par Crazyblinkgirl dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 01/09/2004, 09h16
  4. récupération valeur id auto incrément
    Par Jovial dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/08/2004, 08h56
  5. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo