2014-01-16 137 views
1

我有應用程序發送(多個文本文件)到服務器和進度條更新每個文件發送&得到迴應。一旦所有文件都發送完畢,它將被解僱。AsyncTask和進度條

我已經通過調用循環內的發送函數並且進度條得到更新來成功實現了這一點。現在我想AsyncTask爲每個文件執行http請求,同時進度條也會被更新。

如何定義AsyncTask發送特定文件並獲取響應。在發送的每個文件上,進度條也會更新?

任何幫助將非常感激。

感謝

薩姆

+0

究竟你想知道些什麼?如何將參數傳遞給AsyncTask?或者如何從Asynctask更新ProgressBar? – fifarunnerr

+0

我調用'新的PostDataAsyncTask().exec(currentFile)'在進度條的循環內,它會拋出異常,即無法在非UI線程中調用AsyncTask。然後,我如何更新ProgressBar,以及在哪裏創建AsyncTask實例? – Sam

回答

1

如果您想更新您的ProgressBar,而在你的AsyncTask仍在執行,你應該......

  • AsyncTask落實onProgressUpdate(...)方法。

  • 呼叫,當你想在doInBackground(...)

更新您的進度條publishProgress(...)有這樣的AsyncTask documentation一個例子。

0

您必須從主/ UI線程中調用AsyncTask。您不能從後臺線程啓動AsyncTask。 嘗試從onCreate()調用new PostDataAsyncTask().execute(currentFile)。 正如Yjay提到的,您可以使用onProgressUpdate()publishProgress()來更新ProgressBar的值。

0

這已被問及在許多地方回答。關鍵是使用doInBackground()方法來執行網絡活動,然後可以根據需要從那裏調用publishProgress()以更新對話框。您還需要覆蓋onProgressUpdate(),因爲這是由publishProgress()調用的方法,並且將是您爲對話框添加代碼的位置。

+0

我的進度條在主UI線程中按鈕單擊的新線程中產生。我在哪裏實例化AsyncTask?在這種情況下,我該如何啓動progressBar? – Sam

+0

想法是,您啓動AsyncTask以執行發送文件的網絡I/O,一旦文件完成,您可以調用'publishProgress()',可選地使用某個參數。一旦你這樣做,它會觸發'onProgressUpdate()',這就是你應該更新ProgressBar的地方。不是您通過「單擊按鈕時產生新線程」來描述它的方式。請閱讀文檔和鏈接。 – anddev84