2010-10-26 25 views
0

Imaginez que j'ai le code suivant qui fonctionne comme un processeur de fond pour une application Android:Pourquoi le message 'toast' ne fonctionne-t-il pas sur Android? Impossible de réparer un bug, merci de nous aider!

public class Background extends Service 
{ 
    public void popup (String message, int duration) 
    { 
     Toast.makeText(this, message, duration).show(); 
    } 

    class BackgroundChecker extends TimerTask 
    { 
     public void run() 
     { 
      popup("Message!", Toast.LENGTH_LONG); // here 
     } 
    } 
} 

Quand il atteint le message pop-up à savoir // ici, Android me dit de quitter la force. Je sais que le problème est avec le contexte, c'est-à-dire this, mais je ne sais pas pourquoi parce que j'ai étendu le service dans cette classe à laquelle l'API Android m'a dit de le faire. Pouvez-vous m'aider à comprendre pourquoi cela se produit et comment y remédier? Soit dit en passant, au lieu de this je getApplicationContext() aussi bien, mais il se bloque toujours = (.

Merci.

Répondre

1

Je n'ai pas essayé, mais que diriez-vous d'avoir votre service dire une activité à faire un toast, depuis un service est une activité de fond, il semble que son contexte ne marchait pas à faire un toast.

autre chose que vous pourriez essayer est d'étendre la classe d'application, et un générateur de pain grillé là-bas, puis de votre appel de service.

ApplicationExtender variableName = (ApplicationExtender) Background.this.getApplication();    
variableName.toast("message"); 

Votre ApplicationExtender:

public class ApplicationExtender extends Application { 

    public void toast(String message){ 
    Toast.makeText(super.getApplicationContext(),message,Toast.LENGTH_LONG).show(); 
    } 

} 

Vous devez ajouter votre classe à votre extension manifeste pour que cela fonctionne.

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".ApplicationExtender"> 

Je ne peux pas garantir que cela fonctionnera, je n'ai pas essayé.

+0

Je suis désolé, que voulez-vous dire par classe d'application ci-dessus? Voulez-vous dire Classe de fond – androidNoob

+0

Nope désolé, je l'ai essayé, mais il se bloque toujours. D'autres suggestions? – androidNoob

+0

Je voudrais voir votre logCat pour vous donner plus de commentaires. – blindstuff