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 :

Retour de résultat d'un thread


Sujet :

Android

  1. #1
    Membre très actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 119
    Par défaut Retour de résultat d'un thread
    Bonjour,
    Voici j'ai une trouble qui doit être assez simple. Normalement je programme en c# et je reglerais se probleme les yex fermer mais avec java je suis perdu.
    Voici ma situation
    j'ai une classe 1 qui instancie une classe 2 qui elle contient un socket dans un thread et je veux avoir se qui est recu par le socket dans la classe 1 pour modifier l'interface selon sequi est recu. En c# j'utliserais des delegates mais en java ca semble pas être servir a la meme chose.

    pour faire un petit résumé :
    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
    25
    26
     
    public class1
    {
      class2 myobject = new classe2;
      myobject .receiveData();
    }
     
    public class2
    {
    public  receiveData()
    {
    Thread udpServerThread = new Thread()    
    {
    @Override 
    public void run() 
    {  
    while(true)
    {
    socket.receive(packet);  
    final String acceptedMsg =new String(packet.getData()); 
    }
    }
     
    }
    }
    }
    alors comment retourner le message recu par socket a ma classe1

    merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Pourtant C# n'est pas bien différent....

    Il faut à un endroit un signal qui indique que les données ont été reçues... Dans l'autre thread un endroit qui attende ce signal....

    Ce signal peut être un simple semaphore, ou un message passé par Handler (méthode privilégiée d'Android il me semble).

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Les handler sont effectivement la meilleur façon de passer des données entre Thread (ici ton thread socket et ton thread ui).

    Android propose une classe dérivée de thread qui implémente tout le nécessaire :
    http://developer.android.com/referen...lerThread.html

    Par exemple ton thread de socket pourrait ressembler à cela :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    public class MyThread extends HandlerThread implements Callback
    {
    	public MyThread()
    	{
    		super(ThreadDP.class.getSimpleName(), Process.THREAD_PRIORITY_DISPLAY);
    		this.start();
    	}
     
    	@Override
    	protected void onLooperPrepared()
    	{
    		super.onLooperPrepared();
    	}
     
    	@Override
    	public boolean handleMessage(Message msg) {
    		switch (msg.what)
    		{
    			case 1 :
    				this.doA();
    				return true;
     
    			//Récupération de l'ensemble des caméras
    			case 2 : 
    				this.doB();
    				return true;
     
    			default:
    				return false;
    		}
    	}
    }
    Et dans ton activity tu peux lancer des messages à ton thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socketThreadHandler.sendEmptyMessage(1);
    Dans ton activity tu peux également recevoir des message du thread en déclarant un handler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private Handler mainHandler = new Handler()
    {
    	public void handleMessage(Message msg)
    	{
    		switch(msg.what)
    		{
                       //Gestion des message venant du thread
    		}
    	}
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre très actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 119
    Par défaut
    merci pour la réponse ca semble faire exactement se que je veux.

    Par contre j'ai plutot virer mon thread en service en utilisant cet article

    http://blog.developpez.com/android23...on-de-service/

    mais l'exemple du handler va me servir pareil.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Personellement je préfere poster des runnables et utiliser des interfaces dans les handlers, ca permet de conserver des references active sur les objets (et éviter qu'ils soient détruits entre le post du message et "l'execution" de celui-ci)...


    Si je me souviens bien, ca doit donner un code genre:


    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
     
    MyThread(IResultObject out, Handler hdl)
    {
        this.outResult = out;
        this.handler = (hdl == null && out != null) ? new Handler() : hdl;
    }
     
    public void run()
    {
           ....
           this.handler.post(new Runnable() {
                public void run() {
                    outResult.setResults(...);
                }
           }
    }

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

Discussions similaires

  1. Comment stocker le résultat d'un thread?
    Par bilou_12 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 06/02/2012, 14h55
  2. opérateur de division pour retour du résultat sous forme entière
    Par maroco31 informatik dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2007, 16h18
  3. Oracle XE, PHP --> problème de retour de résultat
    Par Alex01 dans le forum Oracle
    Réponses: 2
    Dernier message: 26/03/2007, 11h41
  4. [Système] retour de résultats par une fonction
    Par maximenet dans le forum Langage
    Réponses: 7
    Dernier message: 18/09/2006, 21h32
  5. Affichage en temps réel du résultat d'un thread
    Par bradley vier dans le forum MFC
    Réponses: 14
    Dernier message: 28/03/2006, 15h56

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