2012-01-03 26 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 ()方法,實現對話框解除任務。
相關問題