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

时间:2013-04-29 10:02:35

标签: android progressdialog

我想在从远程服务器加载一些数据时显示进度对话框:

我正在使用以下线程来获取数据并且它正在运行,但我无法在活动中显示进度条:

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();

    }
你能告诉我我该怎么做!!

5 个答案:

答案 0 :(得分:3)

按如下所示创建类,只需调用此类的对象。

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();
        }
    }

答案 1 :(得分:2)

使用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()

另请注意,如果您要使用Toast,则应使用runOnUiThread

答案 2 :(得分:1)

如果您不想更改代码的结构,可以使用runOnUiThread或处理程序来显示和关闭进度对话框。在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
      }  

      });  
  } 


 }

答案 3 :(得分:0)

在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
     }
 }

答案 4 :(得分:0)

    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();