Wie man einen Toast in AsyncTask zu erhöhen, werde ich aufgefordert, verwendet der Looper
-
26-09-2019 - |
Frage
Ich habe Aufgaben von AsyncTask im Hintergrund abgeschlossen. Irgendwann muss ich einen Toast erteilen, dass etwas abgeschlossen ist.
Ich habe versucht, und ich schlug fehl, weil
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Wie kann ich das tun?
Lösung
OnPostExecute - läuft auf UI-Thread
oder
publishProgress()
; in Ihrem doinbackground und
protected void onProgressUpdate(Integer... progress) {
}
http://developer.android.com/reference/android/os/ AsyncTask.html
Andere Tipps
Sie können Toast innerhalb doInBackground
fügen Sie diesen Code, wo Sie Toast wollen erscheinen
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
}
});
können Sie auch runOnUiThread Methode, um Ihre UI von Hintergrund-Threads zu bearbeiten.
Wenn Sie Toast verwenden Sie sollten diese Methode verwenden: onProgressUpdate ()
protected Integer doInBackground(Void...Params) {
int check_point = 1;
publishProgress(check_point);
return check_point;
}
protected void onProgressUpdate(Integer integers) {
if(integers == 1) {
Toast.makeText(classname.this, "Text", 0).show();
}
Wenn Sie den Toast aus dem Hintergrund-Thread angezeigt werden möchten, müssen Sie haben runOnUiThread von doInBackground nennen. Ich glaube nicht, dass es eine andere Art und Weise.
Edit: Ich nehme diesen Rücken. Ich denke, Sie implementieren können onProgressUpdate, die auf dem UI-Thread ausgeführt wird, den Toast und telefonieren zu publishProgress von doInBackground zu zeigen.
Wenn Sie den Toast in doInBackground angezeigt werden sollen, können Sie es in der OnPostExecute Methode von AsyncTask verwenden können.
protected void onPostExecute(String file_url) {
Toast.makeText(getApplicationContext(),"Your Message", Toast.LENGTH_LONG).show();
pDialog.dismiss();//dismiss the progress dialouge
}