Search code examples
androidandroid-alertdialogprogressdialoglooper

use Looper.prepare to display dialog window


I want to display a dialog window after execution of a work, AND progress dialog should be displayed untill the work is finished.so i try to use thread in following code.

ProgressDialog dialog=new ProgressDialog(SampActivity.this);
                     dialog.setMessage("Please wait..");
                     dialog.setProgress(100);
                     dialog.setMax(5000);
                     dialog.show();
                     Thread progressing = new Thread() 
                       {
                         @Override
                         public void run()
                           {
                                try
                                        {
                                           Thread.sleep(5000);
                                           Looper.prepare();
                                         AlertDialog.Builder 

alertDialogBuilder = new AlertDialog.Builder(SampActivity.this);
                                     alertDialogBuilder.setMessage("finished");
                                     AlertDialog alertDialog = alertDialogBuilder.create();
                                     alertDialog.show();

                                     }
               catch (Exception e) 
               {
                   e.printStackTrace();
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SampActivity.this);
                 alertDialogBuilder.setMessage("Unable to stop SAP.The connection is down.Please retry after sometime.");
                 AlertDialog alertDialog = alertDialogBuilder.create();
                 alertDialog.show();
               }

                       finally
                       {
                           dialog.dismiss();
                       }

                          runOnUiThread(new Runnable(){

                                                @Override
                                                public void run() {
                                                    if(dialog.isShowing())
                                                        dialog.dismiss();
                                                }
                                            });
                       }
                   };       
                 progressing.setPriority(Thread.MAX_PRIORITY );
                 progressing.start();

after running this program the program hangs.i dont know whats wrong in the code. Please help me to figure it out. Thanks in advance.


Solution

  • You cannot update the ui from non-ui thread...You can or use runOnUiThread to do the part that updates the ui:

    runOnUiThread(new Runnable() {
    public void run() {
        //display dialog
    }
    });
    

    Or better use an AsyncTask..

    private class MyTask extends AsyncTask<URL, Integer, Long> {
    
       private Context context;
    
       public MyTask(Context context) {
         this.context = context;
       }
    
       protected void onPreExecute() {
          progressDialog = ProgressDialog.show(context, "", "msg", true); 
       }
    
      protected Long doInBackground(URL... urls) {
           //do something
      }
    
     protected void onPostExecute(Long result) {
         progressDialog.dismiss();  
     }
    }