title: Manage display timing of progress dialog in android
body: <p>Problem is that if user has slow internet connection then i want to show Progress dialog during the loading of data from website.
  I use AsyncTask class to implement this.
  But when i run my code my Dialogbox shown at the time when data is already loaded on screen.
  and during the loading time i seen black screen on emulator.
  Please give suggestions how to show Progress dialog at the starting of loading and it automatically dismiss when loading is end. I dont want to see black screen at starting.
  This is my main java file.
  please help..................</p>
  
  <pre><code>package com.androidhive.xmlparsing;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  import org.w3c.dom.NodeList;
  
  import android.app.ListActivity;
  import android.app.ProgressDialog;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.DialogInterface.OnCancelListener;
  import android.content.Intent;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.AdapterView.OnItemClickListener;
  import android.widget.ListAdapter;
  import android.widget.ListView;
  import android.widget.ProgressBar;
  import android.widget.SimpleAdapter;
  import android.widget.TextView;
  
  public class AndroidXMLParsingActivity extends ListActivity {
  
  
  TextView textView;
  ArrayList&lt;HashMap&lt;String, String&gt;&gt; menuItems;
  // All static variables
  static final String URL = "http://feeds.bbci.co.uk/news/rss.xml" ;
  // XML node keys
  static final String KEY_ITEM = "item"; // parent node
  static final String KEY_ID = "id";
  static final String KEY_NAME = "title";
  //static final String KEY_COST = "cost";
  static final String KEY_DESC = "description";
  static final String KEY_IMAGE = "media:thumbnail";
  
  
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      new HeavyWorker(AndroidXMLParsingActivity.this).execute();
  
  System.out.println("you are on print line 1");  
      menuItems = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();
  
      XMLParser parser = new XMLParser();
      String xml = parser.getXmlFromUrl(URL); // getting XML
      Document doc = parser.getDomElement(xml); // getting DOM element
      System.out.println("you are on print line 2");
      NodeList nl = doc.getElementsByTagName(KEY_ITEM);
      // looping through all item nodes &lt;item&gt;
      for (int i = 0; i &lt; nl.getLength(); i++) {
          // creating new HashMap
          HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
          Element e = (Element) nl.item(i);
          // adding each child node to HashMap key =&gt; value
          map.put(KEY_ID, parser.getValue(e, KEY_ID));
          map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
      //  map.put(KEY_COST, "Rs" + parser.getValue(e, KEY_COST));
          map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
          map.put(KEY_IMAGE, parser.getValue(e, KEY_IMAGE));
  
          // adding HashList to ArrayList
          menuItems.add(map);
      }
  
      System.out.println("you are on print line 3");
  
  
      // Adding menuItems to ListView
      ListAdapter adapter = new SimpleAdapter(this, menuItems,
              R.layout.list_item,
              new String[] { KEY_NAME, KEY_DESC,  KEY_IMAGE}, new int[] {
                      R.id.name, R.id.desciption,   R.id.image });
  
      setListAdapter(adapter);
  
  
  
      // selecting single ListView item
      ListView lv = getListView();
  
      lv.setOnItemClickListener(new OnItemClickListener() {
  
          @Override
          public void onItemClick(AdapterView&lt;?&gt; parent, View view,
                  int position, long id) {
              // getting values from selected ListItem
              String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
          //  String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
              String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();
  
  
              // Starting new intent
              Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
              in.putExtra(KEY_NAME, name);
              //in.putExtra(KEY_COST, cost);
              in.putExtra(KEY_DESC, description);
              startActivity(in);
  
          }
      });
  
  /*       }
      }).start();
  
       */    
           }
  
  public class HeavyWorker extends AsyncTask &lt; Void , Integer, Object &gt; {
  
  
      ProgressBar progressBar = (ProgressBar)findViewById(R.id.progress);
      int progress_status;
  
      private ProgressDialog      progressDialog ;
      private Context             targetCtx ;
  
      public HeavyWorker ( Context context ) {
          this.targetCtx = context ;
        //  this.needToShow = true;
          progressDialog = new ProgressDialog ( targetCtx ) ;
          progressDialog.setCancelable ( false ) ;
          progressDialog.setMessage ( "Retrieving data..." ) ;
          progressDialog.setTitle ( "Please wait" ) ;
          progressDialog.setIndeterminate ( true ) ;
          System.out.println("you are on print line 5");
      }
  
  
  
  
  
  
  
      @Override
      protected void onPostExecute(Object result) {
           if(progressDialog != null &amp;&amp; progressDialog.isShowing()){
                  progressDialog.dismiss ( ) ;
              }
          System.out.println("you are on print line 6");
      }
      @Override
      protected Object doInBackground(Void... params) {
          // TODO Auto-generated method stub
         while (progress_status&lt;100)
               {
                   progress_status+=2;
                   setProgress(progress_status);
                   try {
                       Thread.sleep(3000);
                   } catch (InterruptedException e) {
                       e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                   }
               }
          System.out.println("you are on print line 7");
  
          return null;
      }
      @Override
      protected void onProgressUpdate(Integer... values) {
          // TODO Auto-generated method stub
          super.onProgressUpdate(values);
          progressBar.setProgress(values[0]);
               textView.setText("downloading " +values[0]+"%");
               System.out.println("you are on print line 8");
  
      }
  
  
  
  
  
  
  
      @Override
      protected void onPreExecute() {
          // TODO Auto-generated method stub
           progressDialog.show ( ) ;
          super.onPreExecute();
          System.out.println("you are on print line 9");
      }
  
  
  }
  
  
  }
  </code></pre>