Zaask
Zaask

Reputation: 655

Progress Dialog Box Won't appear - Android

I want to make a Progress Dialog Box in my app to use when sending some information. But the code I wrote won't work. It the method send() executes but the dialog box never appears because it dismisses very quickly

Here is my code :

    ProgressDialog myProgressDialog = ProgressDialog.show(Tents.this,
                                "Please wait...", "Sending...", true);
    send();
    myProgressDialog.dismiss();
    goFour();

How do I make the Dialog Box Last a little longer?

Upvotes: 0

Views: 1382

Answers (5)

Jarek Potiuk
Jarek Potiuk

Reputation: 20077

First of all - you should not do send() in the same thread as show() and dismiss() - because you are effectively blocking UI thread during sending. The dialog will actually never show - because in order to show it after show() is called, you need to give the control back to the main looper in UI thread and simply finish handling whatever event you are handling. Otherwise the UI thread will never have a chance to draw your dialog.

The best idea is to start running send() in AsyncTask and call dismiss() in onPostExecute() (see http://developer.android.com/reference/android/os/AsyncTask.html to get idea how to run async task).

Upvotes: 2

Kenny
Kenny

Reputation: 5542

"I guess my real question would then be how do I make it so that it lasts a little longer?" My answer would be WHY???!!!

I think you would be better showing an alert dialog to confirm your send function has completed, it would be annoying for the user having to wait for no reason!

Upvotes: 0

MattC
MattC

Reputation: 12327

If your send action is completing so quickly that the dialog is not displaying properly, might I suggest instead using an indeterminate progress bar in the upper right corner of your activity via requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS) and then utilizing setProgressBarIndeterminateVisibility(true/false).

Upvotes: 0

Kavitha
Kavitha

Reputation: 471

The UI thread is used to start send() , this will not work and progress dialog will not be shown . Call send in another thread or AsynTask doBackground and on completion dismiss the dialog.

Upvotes: 0

kiswa
kiswa

Reputation: 14987

You are probably getting a progress dialog, but having it immediately dismiss as it has nothing to wait for.

I'll pretend you want this in OnCreate for my example:

 @Override
 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     ProgressDialog pd = ProgressDialog.show(this, "Please wait...", "Sending...");
     new Thread(new Runnable(){
         public void run() {
             send();
             pd.dismiss();
         }
     }).start();

     gofour();
  }

EDIT: If it still goes away immediately, make sure send(); does something that actually takes some time. ;)

Upvotes: 2

Related Questions