Question

Mon application lance un fil pour interroger le web pour certaines données. Je veux afficher un message Toast quand rien ne se trouve, mais mon application se bloque toujours.

Je l'ai essayé d'utiliser le contexte d'application à partir du fil, comme suit:

Toast.makeText(getApplicationContext(), "testttt", Toast.LENGTH_LONG).show();

J'ai aussi essayé de créer un Runnable avec l'appel Toast et appelant runOnUiThread (runnable) du fil (l'appel Toast dans ce runnable utilise l'activité comme premier paramètre).

Est-ce que quelqu'un a des idées sur la façon d'y parvenir?

Était-ce utile?

La solution

Essayez d'afficher à l'intérieur d'un objet gestionnaire.

final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        Toast(this, message, duration).show();
    }

new Thread() {
    public void run() {
        mHandler.post(mUpdateResults);
    }
}.start();

Autres conseils

Toast.makeText().show() doit certainement être exécuté sur le thread d'interface utilisateur.

Vous devriez probablement utiliser un AsyncTask comme Octavian Damiean mentionné, mais voici un code à l'aide runOnUiThread si vous définissez sur l'utilisation que:

    public void showToastFromBackground(final String message) {
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            Toast.makeText(this, message, Toast.LENGTH_LONG).show();
        }
    });
}

Essayez la mise en œuvre d'une classe extension « gestionnaire » dans votre classe d'activité et d'envoyer un message à ce de l'autre fil. Expliqué plus en détail ici:

http://www.anddev.org/the_pizza_timer_-_threading-drawing_on_canvas- t126.html

Et s'il vous plaît, pour poser une question comme cela, inclure la trace de la pile que vous obtenez.

Si vous utilisez le gestionnaire de votre classe d'activité, vous pouvez définir le contexte en référençant simplement les .ce de votre activité comme ceci:

final Runnable showToastMessage = new Runnable() {
    public void run() {
        Toast.makeText(YourActivity.this, "Message", Toast.LENGTH_SHORT).show();
    }
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top