2012-01-03 65 views
2

我不能让我的ProgressDialog显示,我不知道为什么?为什么我看不到使用此活动的ProgressDialog?

验证码:

public class Activity001 extends Activity implements OnClickListener 
{ 
    public void onClick(View view) 
    { 
    ProgressDialog progressDialog = ProgressDialog.show(Activity001.this, "", "wait ", true, false); 

       // Sending some files to server .. takes time .. - (method that take 1-2 minutes) 

    progressDialog.dismiss(); 

     } 
} 

谁能给我个忙吗?

+0

你好,你显示的进展,但...你也隐藏这个,以及异步操作complited之前......(你有代码流的问题?)...在你的示例代码流程中:1.show progress 2. **刚刚开始**异步操作.. 3.隐藏进度... – Selvin 2012-01-03 12:31:17

+0

不,不,关于错误理解抱歉...'发送一些文件'是一些调用方法,这种方法需要时间 - (这个方法完成后 - 1-2分钟)代码将关闭progressdialog。 – Yanshof 2012-01-03 12:34:10

+1

此代码不会工作以及...它会导致ANR ...使用AsyncTask这...有很多例子在这里或谷歌...为什么它不工作...你只是阻止用户界面线程(onclick在ui线程上调用)和ui消息(如fx,draw,其他onclick,ontouch等)不会被处理 – Selvin 2012-01-03 12:44:42

回答

2

试试这个,

在你的onCreate做到这一点()

 Handler handler; 
handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     if (msg.what == 0) { 
    Pdialog.dismiss();  


    } 
    }; 

而现在使用一个线程将文件上传到服务器。修改此一段代码,

public class Activity001 extends Activity implements OnClickListener 
{ 
    public void onClick(View view) 
    { 
    ProgressDialog progressDialog = ProgressDialog.show(Activity001.this, "", "wait ", true, false); 
Thread ProgressThread = new Thread() { 
       @Override 
       public void run() { 
        try { 
           // Sending some files to server .. take time .. - (method that take 1-2 minuts) 



        } catch(InterruptedException e) { 
         // do nothing 
        } finally { 

          handler.sendEmptyMessage(0); 
        } 
       } 
      }; 

       ProgressThread.start(); 


     } 

} 

EDIT

进度对话框是重量轻的目的。它不会优先于主线程中发生的其他任务。例如,当你在主线程中调用一个进程对话框的show()后跟一个http进程或类似的东西时,它不会允许轻量级prgoress对话框优先。所以显然它只会在http进程结束时显示出来。

+0

:您也解决了我的问题,实际上我无法解除进度对话框。但是通过放置oncreate )解决了我的问题,你能解释它是如何工作的吗? – dd619 2012-11-26 05:32:37

2

取而代之,使用Thread实现后台任务的最佳方法是AsyncTask,它也被称为Painless Threading in Android

因为这被称为无痛线程,所以您不需要关心线程管理。

根据您的要求,请执行下列操作:

  1. 内onPreExecute()方法,显示进度条或进度对话框
  2. 内部doInBackground()方法,做你的文件发送任务
  3. 内onPostExecute ()方法,实现对话框解除任务。
相关问题