Android progress dialog

后端 未结 5 1491
猫巷女王i
猫巷女王i 2020-12-09 06:25

My application fetches some html code from the internet and when done , displays it on the devices screen. Since it takes about 3-4 seconds to do that , in this time the scr

相关标签:
5条回答
  • 2020-12-09 07:07

    Dismiss your dialog like this:

    Handler handler = new Handler();
    handler.post(new Runnable(){
       public void run(){
          progressDialog.dismiss();
       }
    });
    
    0 讨论(0)
  • 2020-12-09 07:13

    The top answer works great, so here is an example to implement an AsyncTask in MonoDroid (thanks to Greg Shackels): http://mono-for-android.1047100.n5.nabble.com/AsyncTask-td4346647.html

    0 讨论(0)
  • 2020-12-09 07:20

    The error is explicative enough. To update one visual object you must run the changes inside main thread. A quick and dirty fix could be calling the update code inside runOnUiThread().

    However in your case I would use an AsyncTask to download and update the progress of the progress bar. The task has the property to run on UI thread when it ends (so you can update the views there, such as dismissing the progress dialog)

    Here is an example how to use an AsyncTask to display a download progress dialog.

    Update

    Stackoverflow already has the answers to all your question. Here is an example of an AsyncTask to download some content and display the download progress. Just what you want.

    Update 2

    Ok here is your code using an AsyncTask:

    public class Activity1 extends Activity
    {
        private ProgressDialog progressDialog;
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            new AsyncTask<Integer, Integer, Boolean>()
            {
                ProgressDialog progressDialog;
    
                @Override
                protected void onPreExecute()
                {
                    /*
                     * This is executed on UI thread before doInBackground(). It is
                     * the perfect place to show the progress dialog.
                     */
                    progressDialog = ProgressDialog.show(Activity1.this, "",
                            "Loading...");
                }
    
                @Override
                protected Boolean doInBackground(Integer... params)
                {
                    if (params == null)
                    {
                        return false;
                    }
                    try
                    {
                        /*
                         * This is run on a background thread, so we can sleep here
                         * or do whatever we want without blocking UI thread. A more
                         * advanced use would download chunks of fixed size and call
                         * publishProgress();
                         */
                        Thread.sleep(params[0]);
                        // HERE I'VE PUT ALL THE FUNCTIONS THAT WORK FOR ME
                    }
                    catch (Exception e)
                    {
                        Log.e("tag", e.getMessage());
                        /*
                         * The task failed
                         */
                        return false;
                    }
    
                    /*
                     * The task succeeded
                     */
                    return true;
                }
    
                @Override
                protected void onPostExecute(Boolean result)
                {
                    progressDialog.dismiss();
                    /*
                     * Update here your view objects with content from download. It
                     * is save to dismiss dialogs, update views, etc., since we are
                     * working on UI thread.
                     */
                    AlertDialog.Builder b = new AlertDialog.Builder(Activity1.this);
                    b.setTitle(android.R.string.dialog_alert_title);
                    if (result)
                    {
                        b.setMessage("Download succeeded");
                    }
                    else
                    {
                        b.setMessage("Download failed");
                    }
                    b.setPositiveButton(getString(android.R.string.ok),
                            new DialogInterface.OnClickListener()
                            {
    
                                @Override
                                public void onClick(DialogInterface dlg, int arg1)
                                {
                                    dlg.dismiss();
                                }
                            });
                    b.create().show();
                }
            }.execute(2000);
    
            new Thread()
            {
                @Override
                public void run()
                {
    
                    // dismiss the progressdialog
                    progressDialog.dismiss();
                }
            }.start();
        }
    }
    
    0 讨论(0)
  • 2020-12-09 07:23

    You need to do this way

    runOnUiThread(new Runnable() {
        public void run() {
          // Do Your Stuff
        }});
    
    0 讨论(0)
  • 2020-12-09 07:27

    Create a UI thread after completing network operation

    runOnUiThread(new Runnable() { 
                @Override 
                public void run() { 
                 progressDialog.dismiss();
    
                } 
            });
    
    0 讨论(0)
提交回复
热议问题