pitse Posté(e) 22 juin 2010 Share Posté(e) 22 juin 2010 (modifié) bonjour, j'ai une activity qui necessite un petit traitement de quelques sec je decide de mettre en place un progressDIalog mais le probleme c'est que je demande a mon thread de mettre a jour le ListAdapter de ListActivity et ceci est interdit: public void onCreate(Bundle savedInstanceState) { //... myProgressDialog = ProgressDialog.show(HelloListView.this,"Please wait...", "mess", true); new Thread(this).start(); //... } public void run(){ //traitement + setListAdapter( new RSSFeedAdapter(HelloListView.this,R.layout.row,feeds)); myProgressDialog.dismiss(); } 06-22 15:00:29.651: WARN/System.err(382): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. le soucis c'est que si j'utilise pas de thread, ProgressDialog est inutilisable, ou alors j'ai loupé un truc :/ merci pour votre aide Modifié 22 juin 2010 par pitse Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 22 juin 2010 Share Posté(e) 22 juin 2010 Jette un oeil du côté de AsyncTask, c'est fait pour ça et ça t'évitera des sacs de noeud. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
pitse Posté(e) 22 juin 2010 Auteur Share Posté(e) 22 juin 2010 merci beaucoup pour ton aide, je vais creuser cela par contre, ca n a pas l'air super intuitif :| j'espere que les "..." sont une maladresse :D onProgressUpdate(Integer... progress) { Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 22 juin 2010 Share Posté(e) 22 juin 2010 Non, ce sont des "nouveautés" de java 5 ;-) Les Varargs : http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
pitse Posté(e) 22 juin 2010 Auteur Share Posté(e) 22 juin 2010 (modifié) je me suis effectivement arreté a java 4 :) par contre je seche completement sur asyncTask, je viens de trouver cet exemple un peu plus clair: http://android-developers.blogspot.com/2009/05/painless-threading.html public void onClick(View v) { new DownloadImageTask().execute("http://example.com/image.png"); } private class DownloadImageTask extends AsyncTask { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); } } mais je comprend pas si je peux ou non fournir l'instance de mon activity a ce type d'objet ? parce qu'en l'etat, ca complique grandement les interactions entre l'activity principale et l'objet heritant AsyncTask merci encore pour ton aide, Modifié 22 juin 2010 par pitse Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 22 juin 2010 Share Posté(e) 22 juin 2010 en général pour résoudre ces problemes de parametres instances....je me crée l'asynctask en dynamique. dans une fonction de ton activity Toto , par example : void tata, tu veux appeler la methode momo dans l asynctask void tata(){ AsyncTask tutu = new AsyncTask(){ //les fonctions de l'asynctask avec un joli momo(), ou Toto.this.momo(); }; } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
pitse Posté(e) 23 juin 2010 Auteur Share Posté(e) 23 juin 2010 merci beaucoup a vous, j'ai pu y arrivé, trop content :D Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 23 juin 2010 Share Posté(e) 23 juin 2010 Héhé merci pour l'AsyncTask, je ne connaissais pas et je faisais avec un Runnable et Handler Ca revient au même au final mais c'est beaucoup plus sympa à mettre en place :o Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
pitse Posté(e) 23 juin 2010 Auteur Share Posté(e) 23 juin 2010 sympa je sais pas si c'est le mot :D perso je prefere la syntax d'un bon vieux Thread ( pas tapé hein ;) ) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 26 juin 2010 Share Posté(e) 26 juin 2010 sur Android, il existe un thread particulier : le UI thread c'est lui qui exécute onCreate (et les autres méthodes) de Activity TOUTE INTERACTION AVEC L'INTERFACE GRAPHIQUE DOIT SE FAIRE VIA LE UI THREAD !!! (sinon ça plante) généralement, on utilise : - AsyncTask - Handler - Activity.runOnUiThread(Runnable) - View.post(Runnable) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.