2011-05-09 52 views
3

我的應用程序需要不斷連接遠程服務器才能下載數據。我想在下載數據時實施進度欄,並顯示進度和估計的下載時間。與服務器同步時的進度條

任何人都可以請建議最好的方法來做到這一點?

回答

2

這取決於類型的同步...例如:

  • 如果您的同步過程包括只下載1包含所有新數據(比如說一個JSON文件)的文件,這很容易。你只需要測量你下載了多少文件(看看這個問題Download a file with Android, and showing the progress in a ProgressDialog
  • 如果你的同步過程涉及到下載不同的文件(比如圖像,文本等)......你可以實現進度酒吧取決於有多少文件需要下載(希望它們的重量有多少)。
  • 如果您下載不同的文件,但是他們的同步不同,您可以先詢問服務器同步將使用多少個文​​件以及每個文件的大小。然後像上面一樣做。

理想情況下,您必須考慮您正在接收的文件大小+您使用它們的時間。

+0

非常感謝您的快速回答。目前我只想下載json文件。所以,你發送的鏈接對我來說應該足夠了。我會試試這個,如果有問題讓你知道。 – Sapan 2011-05-09 17:09:11

+0

HI,在我的主類中,我創建了一個progressDialog,然後調用了DownLoad File的執行函數。如果連接到服務器時出錯,我想更新進度條中的消息,然後關閉進度dialox框。我試圖在doInBackground函數的catch塊中做這件事,但我得到一個錯誤:只有原始線程可以修改進度對話框?我應該怎麼做?我甚至無法在DownLoad文件類中創建Toast消息 – Sapan 2011-05-10 05:40:31

+0

這是因爲doInBackground方法在另一個線程中執行。爲了在它裏面做UI的東西,你必須使用'runOnUiThread'方法。查找有關它的信息。 – Cristian 2011-05-10 13:12:17

3

使用AsyncTask進行連接。

在preExecute中獲取要下載的對象的大小,使用對象的上限大小創建進度條等。

onProgressUpdate計算自上次進度更新以來已完成了多少工作,以便您可以估算時間並更新您的進度欄,並且總計完成。