2012-10-17 82 views
0

我發現很多人都有類似的問題,但我只是試圖顯示一個對話框,而我從網址抓取一些數據,然後在數據被檢索。這裏是我想要做的(這是我的onClick()方法的一個刷新按鈕):Android:顯示進度對話框,然後正確解除

dialog.show(); 
// do some work 
dialog.dismiss(); 

這樣做,這樣你永遠不會真正看到對話框的。我試着使用額外的線程,如做:

Thread t = new Thread() { 
    public void run() { 
     dialog.show(); 
    } 
}; 

可是這樣一來,我得到一個錯誤和強制關閉了下來...
什麼是做到這一點的最好方法是什麼?

+0

檢查這個http://codinglookseasy.blogspot.in/2012/10/save-image-in-sdcard.html這裏在整個代碼中有一個進度在onclick() –

+0

使用的AsyncTask,因爲這將是最適合這種任務的對話框。 – Scorpion

回答

0

對於任務你想實現:

dialog.show(); 
// do some work 
dialog.dismiss(); 

現在,上面的實現,還有的AsyncTask,最好的辦法的概念來實現線程任務,因爲它也被稱爲Android中的無痛線程

的AsyncTask有4種主要方法:

  1. onPreExecute() - 在這裏,您可以顯示ProgressDialog或進度。
  2. doInBackground() - 在這裏你可以做/執行後臺任務
  3. onProgressUpdate() - 在這裏你可以根據你的Web服務調用或後臺任務
  4. onPostExecute()收到中間結果更新UI - 在這裏你可以關閉對話框或取得進展酒吧隱形。您也可以在收到後臺任務或web服務調用的結果後執行想要執行的任務。
+1

,這是很有幫助謝謝你。我也只是發現有人誰與控制器這樣做(見鏈接),但它看起來像你有什麼更強勁。[鏈接] http://www.helloandroid.com/tutorials/using-threads-and-progressdialog – Fobos13

+0

@ user1752041是多數民衆贊成也是一個解決方案,但我們爲什麼要Android開發者需要如果我們已經有一些奇妙的東西(例如,的AsyncTask) –

0

對於這類任務,我主要推薦您使用AsyncTask。 Here就是一個很好的例子,它可以幫助你。

而對於這個問題,你正在做UI相關的任務,因此請使用UI線程。

runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
    // TODO Auto-generated method stub 
    //Show or Hide your ProgressDialog 
    } 
}); 
0

嘗試使用Activity的runOnUiThread而不是使用Thread。 檢查下面的代碼片段。 runOnUiThread(新的Runnable(){

  public void run() { 

        dialog = new ProgressDialog(ctContext); 

        dialog.show(); 
       } 
      } 

     }); 

我認爲這會幫助你。