2011-05-09 63 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计算自上次进度更新以来已完成了多少工作,以便您可以估算时间并更新您的进度栏,并且总计完成。