Aller au contenu

utilisation de ProgressDialog dans un thread


pitse

Recommended Posts

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é par pitse
Lien vers le commentaire
Partager sur d’autres sites

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é par pitse
Lien vers le commentaire
Partager sur d’autres sites

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();

};

}

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...