简体   繁体   English

加载数据时显示进度对话框

[英]show progress dialog while loading data

I want to show a progress dialog while loading some data from remote server : 从远程服务器加载一些数据时,我想显示一个进度对话框:

I'm using the following thread in order to get the data and it's working, but i'm not able to show the progress bar on the activity: 我正在使用以下线程来获取数据并且它正在工作,但是我无法在活动中显示进度栏:

public class Request {

    public String text ;
    public boolean downloadText(String urlStr) {
        final String url = urlStr;
        new Thread () {
            public void run() {
                int BUFFER_SIZE = 2000;
                InputStream in = null;
                Message msg = Message.obtain();
                msg.what=2;
                try {
                    in = openHttpConnection(url);

                    InputStreamReader isr = new InputStreamReader(in);
                    int charRead;
                      text = "";
                      char[] inputBuffer = new char[BUFFER_SIZE];

                          while ((charRead = isr.read(inputBuffer))>0)
                          {                    
                              //---convert the chars to a String---
                              String readString = 
                                  String.copyValueOf(inputBuffer, 0, charRead);                    
                              text += readString;
                              inputBuffer = new char[BUFFER_SIZE];
                          }
                         Bundle b = new Bundle();
                            b.putString("text", text);
                            msg.setData(b);
                          in.close();

                }catch (IOException e) {
                    e.printStackTrace();
                }


            }
        }.start();

    }

would you please tell me how can i do it !! 你能告诉我我该怎么做!

create the class as below and just call the object of this class. 如下创建类,并仅调用该类的对象。

class MyTask extends AsyncTask<Void, Void, Void> {

        ProgressDialog Asycdialog = new ProgressDialog(ActivityName.this);

        @Override
        protected void onPreExecute() {

            super.onPreExecute();
            Asycdialog.setMessage("Loading...");
            Asycdialog.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {

            // do the task you want to do. This will be executed in background.
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {

            super.onPostExecute(result);
            Asycdialog.dismiss();
        }
    }

Use progressDialog 使用progressDialog

final ProgressDialog progress=ProgressDialog.show(youractivity.this,"","message");
 new Thread()
  {
   public void run()
   {
     try{
      youractivity.this.runOnUiThread(new Runnable(){
      @Override
      public void run() {
       // TODO Auto-generated method stub
               // your code
      }
      });
     }
     catch(Exception e)
     {
     }
     progress.dismiss();
   }
}.start()

Also, note that if you want to use Toast , you should use runOnUiThread 另外,请注意,如果要使用Toast ,则应使用runOnUiThread

If you do not want to change the structure of your code, you can use runOnUiThread or an Handler to show and dissmiss the progress dialog. 如果您不想更改代码的结构,则可以使用runOnUiThread或Handler来显示和runOnUiThread进度对话框。 Show it when the firs line of the run method is excuted and dismiss it in the finally block. run方法的第一行时显示它,并在finally块中将其关闭。

 public void run() {

    runOnUiThread(new Runnable() {

      public void run(){
         // show progress dialog
      }  

      });  

  /// your code here
  try {




  } catch (IOException e) {
  } finally {
          runOnUiThread(new Runnable() {

      public void run(){
         // dismiss progress dialog
      }  

      });  
  } 


 }

Create Progress Dialog in AsyncTask 在AsyncTask中创建进度对话框

private class YourAsyncTask extends AsyncTask<Void, Void, Void> {
     protected Void doInBackground(Void... args) {
        // do background work here
        return null;
     }

     protected void onPostExecute(Void result) {
         // do UI work here
     }
 }
    pDialog = ProgressDialog.show(context, null, "Loading...", true);
    pDialog.setCancelable(false);

    new Thread() {
        public void run() {

            // handle the exception somehow, or do nothing

            // run code on the UI thread

            runOnUiThread(new Runnable() {

                @Override
                public void run() {

                    try {


                                 // do yor ui part here
                         } catch (Exception e) {

                        e.printStackTrace();
                    }

                }
            });
        }
    }.start();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM