2010-09-13 9 views
3

J'essaie d'afficher un Toast dans une AsyncTask. Ce premier morceau de code est placé dans une activité que l'on peut appeler MyActivity, et fonctionne très bien:Problèmes de contexte lorsque j'essaie d'afficher Toast

Toast.makeText(this, "Toast!", Toast.LENGTH_SHORT).show(); 

Puis-je créer une nouvelle instance de MyObject et appelle method(). Ce code est également placé dans MyActivity.

MyObject obj = new MyObject(this); 
obj.method(); 

Ceci est la définition de MyObject. Le ProgressDialog fonctionne bien, mais aucun toast n'est montré. Je croyais que je faisais exactement la même chose dans mon premier exemple et ci-dessous, mais apparemment, il me manque quelque chose. J'ai également essayé getApplicationContext() et cxt.getApplicationContext() au lieu de cxt, mais avec le même résultat.

+0

Vous ne devriez pas être en train de créer de nouvelles instances d'activités avec 'new' – Falmarri

+0

Désolé, je ne fais pas ça normalement. Je viens de réécrire mon code régulier dans un meilleur exemple et je n'y ai pas pensé. Mais merci pour le point! :) – nip3o

Répondre

2

WRAP dans la méthode runOnUIThread:

runOnUiThread(new Runnable() { 
    public void run() { 
     Toast.makeText(cxt, "Toast!", Toast.LENGTH_SHORT).show(); 
    } 
}); 

C'est parce que la méthode doInBackground n'a pas été exécuté sur l'interface utilisateur de cette discussion, donc vous devez forcer cela.

0

Vous devez utiliser

MyObject.this 

intérieur du AsyncTask