Progress Dialog for AsyncTask - Android

26,267

Solution 1

You must call ProgressDialog show() method on AsyncTasks onPreExecute(). For example:

class MyTask extends AsyncTask<Void, Void, Void> {
 ProgressDialog pd;
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
       pd = new ProgressDialog(MainActivity.this);
       pd.setMessage("loading");
       pd.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
      // Do your request
    }

    @Override
    protected void onPostExecute(Void result) {
      super.onPostExecute(result);
      if (pd != null)
      {
         pd.dismiss();
      }
    }
  }

Solution 2

You must use a onPreExecute and onPostExecute of AsyncTask class. For example:

class AsyncData extends AsyncTask<Void, Void, Void>{

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // init progressdialog
    }


    @Override
    protected Void doInBackground(Void... arg0) {
        // get data
        return null;
    }


    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // dismiss dialog
    }
}
Share:
26,267
user3156801
Author by

user3156801

Updated on September 20, 2020

Comments

  • user3156801
    user3156801 over 3 years

    I'm trying to show a progress dialog while the twitter feed is loading up...However the progress dialog remains on screen when the twitter feed appears. Any help is much appreciated.

    public class MainActivity extends ListActivity {
    
        final static String twitterScreenName = "CFABUK";
        final static String TAG = "MainActivity";
        private AsyncTask<Object, Void, ArrayList<TwitterTweet>> tat;
        boolean done;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            done=false;
            AndroidNetworkUtility androidNetworkUtility = new AndroidNetworkUtility();
            if (androidNetworkUtility.isConnected(this)) {
                TwitterAsyncTask syn=new TwitterAsyncTask();
                syn.execute(twitterScreenName,this);
    
    
                ProgressDialog pd = new ProgressDialog(MainActivity.this);
                pd.setMessage("loading");
                pd.show();
    
                do {
                    if(!(syn.getStatus()==AsyncTask.Status.RUNNING)) {
                    pd.dismiss();
                    pd.cancel();
                    done=true;
                    }
                } while(done=false);
    
    
            } else {
                Log.v(TAG, "Network not Available!");
            }
        }
    }