Wie zu verwenden toast-Nachricht auf der Innenseite Thread in Android
Ich bin vor einige Probleme wenn ich mit Toast innerhalb der run-Methode der Thread-Klasse.
Mein Fehler 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)
Aber wenn ich ignorieren Toast funktioniert es einwandfrei. Aber ich will, es zu benutzen. Bitte helfen Sie.
Müssen Sie rufen Sie in der UI-thread.
Verwenden handler zu zeigen, toast im hintergrund-thread.
betrachten Sie mit AsyncTask onPostExecute () - Methode für das zeigen von Toast.
können Sie plz fügen Sie Ihren code?
Posten Sie Ihre
Verwenden handler zu zeigen, toast im hintergrund-thread.
betrachten Sie mit AsyncTask onPostExecute () - Methode für das zeigen von Toast.
können Sie plz fügen Sie Ihren code?
Posten Sie Ihre
doInBackground()
code.
InformationsquelleAutor | 2013-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden oder Zugriff auf alle UI-Elemente in einem nicht-UI-thread. Wenn Sie sehen wollen, einige Nachrichten über deinen thread-dann können Sie AsyncTask verwenden und die UI stopft innen preExecute-Methode.da die pre-und postExecute der AsyncTask ausgeführt werden UI-thread.
Wenn Sie wollen, um wie so dann sehen Problem mit Toast in AsyncTask-Methode aufrufen .
Wenn Sie sind, ausgenommen eine kleine und einfache Weise, dann verwenden Sie einfach LOG-Klasse wie:
Wenn Sie möchten, einige Ideen zu melden, dann finden Sie Android Log.v(), Log.d(), Log.ich(), Log.w(), Log.e() - Verwendung?
Hoffe das reicht für deine Frage.
Ich habe bereits einige Möglichkeiten und links, und Sie können auch sehen, die anderen Antworten hier, wie jay ,pratic und sergi zu verwenden runOnUiThread.Alle Antworten sind hilfreich.
InformationsquelleAutor Ranjit
Durch den Aufruf einer Aktivität runOnUiThread Methode aus dem Thread:
InformationsquelleAutor Jay
Haben Sie zum aufrufen der Toast auf den UI-thread.
AsyncTask onPostExecute läuft auf UI-thread. Wenn Sie möchten, zu "zwingen" einen UI-thread, können Sie den folgenden code innerhalb onBackground:
InformationsquelleAutor Reinherd
Entsprechend Ihrer
logcat
Sie versuchen, zu aktualisierenUI part (using Toast)
imdoInBackground()
vonAsyncTask
die ist nicht direkt möglichVerwenden Sie das gleiche in
onPostExecute()
die fürhandling/updating UI Part
Wenn Sie wollen, um zu zeigen
Toast in doInbackground()
wickeln Sie die
Toast in runOnUIThread()
aber dies ist nicht die beste Lösung.wie
InformationsquelleAutor Tarsem Singh
Können Sie zeigen Sie Ihre Toast-Nachricht wie folgt:
InformationsquelleAutor
Können Sie nicht drucken Toast im Thread, weil der Thread läuft im hintergrund und es wird sich nicht auf GUI-Dinge. Sie haben es zu tun mit dem UI-Thread.
InformationsquelleAutor Pratik Dasa
Müssen Sie rufen toast innen
onPostExecute()
MethodeInformationsquelleAutor Ashok