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 :

Problème de raffraichissement d'affichage, de thread (avec UPnP)


Sujet :

Android

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 50
    Points
    50
    Par défaut Problème de raffraichissement d'affichage, de thread (avec UPnP)
    Bonjour,

    je suis en train de développer une première application simple sous Android :

    le but est de décupérer des informations via UPnP et de mettre à jour l'affichage en tenant compte de ces données.

    Pour le moment, comme je découvre Android, je reste sur un simple affichage de text envoyé via un service UPnP.

    Mon problème est que le thread envoyant les informations UPnP n'est pas le même que celui d'affichage.
    Et je n'arrive pas faire un refresh de ma TextView.
    J'aurai donc besoin d'un coup de main pour me sortir de ce bourbier!!!

    Voici ce que j'ai déjà essayé

    J'ai essayé avec un handler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TextView text = (TextView) findViewById(R.id.temp);
    ...
    text.getHandler().post(new Runnable() {
     
       @Override
       public void run() {
       // TODO Auto-generated method stub
       text.refreshDrawableState();
       }
    });
    Cela ne fonctionne pas

    J'ai essayé avec des messages :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    public class MyClass extends Activity {
            ...
            public static final int MESSAGE_REFRESH = 1;
    	private View viewToRefresh;
            private TextView MyTextView;
            private MyrefreshHandler handler;
     
    	public class MyrefreshHandler extends Handler{
    		@Override
    		public void handleMessage(Message m){
    			switch (m.what) {
    			case TemperatureDisplay.MESSAGE_REFRESH:
    				Log.d("????????????????", "ok");
    				TemperatureDisplay.this.viewToRefresh.invalidate();
    				break;
     
    			default:
    				break;
    			}
    		}
    	}
     
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
                    // active le wifi
    		WifiManager wm=(WifiManager)getSystemService(WIFI_SERVICE);
    		lock = wm.createMulticastLock("mylock");
    		lock.acquire();
     
     
    		try {
     
    			TextView MyTextView = (TextView) findViewById(R.id.temp);
    			this.viewToRefresh = MyTextView;
    			handler = new MyrefreshHandler();
                            ...
    		} catch (InvalidDescriptionException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    ...
     
             public void updateValue(String value)
    			{
    				MyTextView.setText(value);
    				try{
    					Message message = new Message();
    					message.what = MyClass.MESSAGE_REFRESH;
    				        this.handler.handleMessage(message);
    				}catch(Exception e){
    					e.printStackTrace();
    				}
    				System.out.println("+++++ value updated");
    			}
    Cela ne fonctionne toujours pas et voici un message d'erreur que je peux avoir dans les log trace :
    10-08 10:12:25.540: WARN/System.err(10579): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    10-08 10:12:25.540: WARN/System.err(10579): at android.view.ViewRoot.checkThread(ViewRoot.java:2683)
    10-08 10:12:25.540: WARN/System.err(10579): at android.view.ViewRoot.invalidateChild(ViewRoot.java:570)
    10-08 10:12:25.540: WARN/System.err(10579): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:596)
    10-08 10:12:25.540: WARN/System.err(10579): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2392)
    10-08 10:12:25.540: WARN/System.err(10579): at android.view.View.invalidate(View.java:4945)
    10-08 10:12:25.540: WARN/System.err(10579): at ambiantComp.android.temperatureDisplay.TemperatureDisplay$MyrefreshHandler.handleMessage(TemperatureDisplay.java:37)
    10-08 10:12:25.540: WARN/System.err(10579): at ambiantComp.android.temperatureDisplay.TemperatureDevice.updateTemperature(TemperatureDevice.java:220)
    10-08 10:12:25.540: WARN/System.err(10579): at ambiantComp.android.temperatureDisplay.TemperatureDevice.actionControlReceived(TemperatureDevice.java:174)
    10-08 10:12:25.540: WARN/System.err(10579): at org.cybergarage.upnp.Action.performActionListener(Action.java:334)
    10-08 10:12:25.540: WARN/System.err(10579): at org.cybergarage.upnp.Device.deviceActionControlRecieved(Device.java:1668)
    10-08 10:12:25.540: WARN/System.err(10579): at org.cybergarage.upnp.Device.deviceControlRequestRecieved(Device.java:1632)
    10-08 10:12:25.540: WARN/System.err(10579): at org.cybergarage.upnp.Device.soapActionRecieved(Device.java:1617)
    10-08 10:12:25.548: WARN/System.err(10579): at org.cybergarage.upnp.Device.httpPostRequestRecieved(Device.java:1594)
    10-08 10:12:25.548: WARN/System.err(10579): at org.cybergarage.upnp.Device.httpRequestRecieved(Device.java:1524)
    10-08 10:12:25.548: WARN/System.err(10579): at ambiantComp.android.temperatureDisplay.TemperatureDevice.httpRequestRecieved(TemperatureDevice.java:198)
    10-08 10:12:25.548: WARN/System.err(10579): at org.cybergarage.http.HTTPServer.performRequestListener(HTTPServer.java:216)
    10-08 10:12:25.548: WARN/System.err(10579): at org.cybergarage.http.HTTPServerThread.run(HTTPServerThread.java:54)

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    As-tu tester le "runOnUIThread" ? Ca pourrait t'être utile...
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup, c'est ce qu'il me fallait!!!

    J'arrive à mettre à jour ma TextView.
    Enfin seulement pour la première modification..., ensuite lorsque j'envoie une nouvelle modification du texte, elle n'est pas prise en compte par l'affichage

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    Finalement je ne lance plus invalidate() sur ma TextView mais sur mon linearLayout et cela fonctionne bien.

    Merci pour ton aide

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

Discussions similaires

  1. [SFML] Problème avec affichage en thread
    Par black is beautiful dans le forum SFML
    Réponses: 0
    Dernier message: 05/05/2009, 11h33
  2. [MySQL] Problème affichage tableau PHP avec données SQL
    Par akalaan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 15h34
  3. problème d'affichage d'image avec mozilla
    Par lyon31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/03/2006, 17h27
  4. [Mail] Problème d'affichage d'HEADERS avec mail();
    Par JeanMi66 dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2006, 07h46
  5. Problème d'affichage de données avec crystal report
    Par napegadie dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 07/12/2005, 16h45

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