2013-04-29 57 views
1

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

我用下面的线程,以获取数据和它的工作,但我不能够在活动上显示进度条:

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

    } 

你能告诉我我该怎么做!

+0

首先,您的ProgressDialog代码在哪里?我没有在上面的代码中找到它。如果您要求在上述课程中实施,请查看我的答案。 – 2013-04-29 10:39:51

回答

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

1

如果你不想更改代码的结构,可以使用runOnUiThread或Handler来显示和解除进度对话框。当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 
     } 

     }); 
    } 


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