Can't create handler inside thread that has not called Looper.prepare() inside AsyncTask for ProgressDialog Can't create handler inside thread that has not called Looper.prepare() inside AsyncTask for ProgressDialog android android

Can't create handler inside thread that has not called Looper.prepare() inside AsyncTask for ProgressDialog


The method show() must be called from the User-Interface (UI) thread, while doInBackground() runs on different thread which is the main reason why AsyncTask was designed.

You have to call show() either in onProgressUpdate() or in onPostExecute().

For example:

class ExampleTask extends AsyncTask<String, String, String> {    // Your onPreExecute method.    @Override    protected String doInBackground(String... params) {        // Your code.        if (condition_is_true) {            this.publishProgress("Show the dialog");        }        return "Result";    }    @Override    protected void onProgressUpdate(String... values) {        super.onProgressUpdate(values);        connectionProgressDialog.dismiss();        downloadSpinnerProgressDialog.show();    }}


I had a similar issue but from reading this question I figured I could run on UI thread:

YourActivity.this.runOnUiThread(new Runnable() {    public void run() {        alertDialog.show();    }});

Seems to do the trick for me.


I had a hard time making this work too, the solution for me was to use both hyui and konstantin answers,

class ExampleTask extends AsyncTask<String, String, String> {// Your onPreExecute method.@Overrideprotected String doInBackground(String... params) {    // Your code.    if (condition_is_true) {        this.publishProgress("Show the dialog");    }    return "Result";}@Overrideprotected void onProgressUpdate(String... values) {    super.onProgressUpdate(values);    YourActivity.this.runOnUiThread(new Runnable() {       public void run() {           alertDialog.show();       }     }); }}