Progress dialog for AsyncTask - Android

I'm trying to show a progress dialog while the twitter feed is loading ... However, the progress dialog stays on screen when the twitter feed appears. Any help is greatly 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!");
        }
    }
}

      

+3


source to share


4 answers


You have to call the ProgressDialog show () method for 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();
      }
    }
  }

      

+6


source


You have to use 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
    }
}

      

+2


source


Methods onPreExecute()

, doInBackground()

and onPostExecute()

for AsyncTask are used for the purpose you talked about -

public class MainActivity extends ListActivity {

    final static String twitterScreenName = "CFABUK";
    final static String TAG = "MainActivity";
    private AsyncTask<Object, Void, ArrayList<TwitterTweet>> tat;
    boolean done;
    Context context;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        done=false;
        context = this;
        new NetworkTask().execute();
    }
}


class NetworkTask extends AsyncTask<String, String, String> 
{

  Context ctx = context ;

  @Override
  protected void onPreExecute() 
  {
    super.onPreExecute();
    pDialog = new ProgressDialog(getActivity());
    pDialog.setMessage("Working ...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    pDialog.show();
}

@Override
protected String doInBackground(String... args) 
{

    //Do your background work here and pass the value to onPostExecute

    AndroidNetworkUtility androidNetworkUtility = new AndroidNetworkUtility();

    if (androidNetworkUtility.isConnected(ctx)) {
            TwitterAsyncTask syn=new TwitterAsyncTask();
            syn.execute(twitterScreenName,this);

             while(done)
             {
                if(!(syn.getStatus()==AsyncTask.Status.RUNNING)) 
                {
                   done=true;
                }
                else 
                {
                   Log.v(TAG, "Network not Available!");
                } 
             }

    return done + "";

}

protected void onPostExecute(String result) 
{

   //Do something with result and close the progress dialog

   pDialog.dismiss();

}

      

0


source


ProgressBar is the best alternative for ProgressDialog. A user interface element that indicates the progress of an operation. ProgressDialog has been deprecated in recent versions.

See Android developer official website for details: https://developer.android.com/reference/android/widget/ProgressBar.html

0


source







All Articles