Comment utiliser toast message à l'intérieur de Thread dans Android
Je suis confronté à quelques problèmes lorsque j'utilise Toast à l'intérieur de la méthode run de la classe Thread.
Mon erreur Logcat
09-16 11:42:38.140: E/AndroidRuntime(1446): in writeCrashedAppName, pkgName :com.monday.worker_android
09-16 11:59:17.920: E/AndroidRuntime(2144): FATAL EXCEPTION: AsyncTask #1
09-16 11:59:17.920: E/AndroidRuntime(2144): java.lang.RuntimeException: An error occured while executing doInBackground()
09-16 11:59:17.920: E/AndroidRuntime(2144): at android.os.AsyncTask$3.done(AsyncTask.java:200)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.lang.Thread.run(Thread.java:1019)
09-16 11:59:17.920: E/AndroidRuntime(2144): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
09-16 11:59:17.920: E/AndroidRuntime(2144): at android.os.Handler.<init>(Handler.java:121)
09-16 11:59:17.920: E/AndroidRuntime(2144): at android.widget.Toast.<init>(Toast.java:75)
09-16 11:59:17.920: E/AndroidRuntime(2144): at android.widget.Toast.makeText(Toast.java:244)
09-16 11:59:17.920: E/AndroidRuntime(2144): at com.monday.worker_android.SwipePage$2.doInBackground(SwipePage.java:142)
09-16 11:59:17.920: E/AndroidRuntime(2144): at com.monday.worker_android.SwipePage$2.doInBackground(SwipePage.java:1)
09-16 11:59:17.920: E/AndroidRuntime(2144): at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-16 11:59:17.920: E/AndroidRuntime(2144): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
Mais quand je l'ignore Toast, il fonctionne très bien. Mais je veux l'utiliser. S'il vous plaît aider.
Vous devez appeler dans le thread de l'INTERFACE utilisateur.
Utilisation du gestionnaire de montrer toast dans le thread d'arrière-plan.
envisager l'utilisation d'AsyncTask onPostExecute() méthode pour montrer Toast.
pouvez-vous svp mettre votre code?
Publier vos
Utilisation du gestionnaire de montrer toast dans le thread d'arrière-plan.
envisager l'utilisation d'AsyncTask onPostExecute() méthode pour montrer Toast.
pouvez-vous svp mettre votre code?
Publier vos
doInBackground()
code.
OriginalL'auteur | 2013-09-16
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser ou accéder à tous les éléments d'INTERFACE utilisateur à l'intérieur d'un non thread d'INTERFACE utilisateur. Si vous voulez voir quelques messages au sujet de votre fil, vous pouvez utiliser AsyncTask et l'utilisation de l'INTERFACE utilisateur fourre à l'intérieur de preExecute méthode.car le pré et postExecute de AsyncTask sont exécutés sur le thread de l'INTERFACE utilisateur.
Si vous voulez faire comme alors voir Problème avec le pain grillé AsyncTask appel de la méthode .
Si vous êtes à l'exception d'un petit et facile, alors il suffit d'utiliser le JOURNAL de classe comme:
Si vous voulez quelques idées sur les journaux alors s'il vous plaît voir Android Journal.v(), Log.d(), Log.i(), Log.w(), Log.e() - Quand les utiliser?
Espère que ceux-ci sont suffisants pour votre question.
J'ai déjà vous donner quelques moyens et des liens, et vous pouvez également voir les autres réponses ici, comme jay ,le pratic et sergi à utiliser runOnUiThread.Toutes les réponses sont utiles.
OriginalL'auteur Ranjit
Par l'appel d'une Activité de runOnUiThread méthode à partir de votre Fil de discussion:
OriginalL'auteur Jay
Que vous avez d'appeler le Toast sur le thread de l'INTERFACE utilisateur.
AsyncTask onPostExecute s'exécute sur le thread de l'INTERFACE utilisateur. Si vous souhaitez de "forcer" un thread d'INTERFACE utilisateur, vous pouvez utiliser le code suivant à l'intérieur de onBackground:
OriginalL'auteur Reinherd
Selon votre
logcat
vous essayez de mettre à jourUI part (using Toast)
dansdoInBackground()
deAsyncTask
qui n'est pas possible directementUtiliser même dans
onPostExecute()
qui est utilisé pourhandling/updating UI Part
Si vous voulez montrer
Toast in doInbackground()
envelopper le
Toast in runOnUIThread()
mais ce n'est pas la meilleure solution.comme
OriginalL'auteur Tarsem Singh
Vous pouvez afficher votre Toast message comme ci-dessous:
OriginalL'auteur
Vous ne pouvez pas imprimer Toast dans le Thread, parce que le Thread est en cours d'exécution en arrière-plan et il ne sera pas affecter GUI choses. Vous devez le faire à l'aide de Thread de l'INTERFACE utilisateur.
OriginalL'auteur Pratik Dasa
Vous devez appeler toast à l'intérieur de
onPostExecute()
méthodeOriginalL'auteur Ashok