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:
Cela ne fonctionne pas
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(); } });
J'ai essayé avec des messages :
Cela ne fonctionne toujours pas et voici un message d'erreur que je peux avoir dans les log trace :
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"); }
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)
Partager