【问题标题】:Progress bar while syncing with server与服务器同步时的进度条
【发布时间】:2011-05-09 16:57:55
【问题描述】:

我的应用程序需要不断地连接远程服务器来下载数据。我想在下载数据时实现一个进度条,并显示下载进度和估计剩余时间。

谁能建议最好的方法来做到这一点?

【问题讨论】:

    标签: android progress-bar progress


    【解决方案1】:

    使用 AsyncTask 进行连接。

    在 preExecute 中获取要下载的对象的大小,使用对象的上限大小创建进度条等。

    在 onProgressUpdate 中计算自上次进度更新以来已经完成了多少,这样您就可以估计时间并更新您的进度条,其中包含到目前为止完成的总数。

    【讨论】:

      【解决方案2】:

      这取决于同步的类型...例如:

      • 如果您的同步过程只包括下载一个包含所有新数据的文件(例如 JSON 文件),这很容易。你只需要测量你下载了多少文件(看看这个问题Download a file with Android, and showing the progress in a ProgressDialog
      • 如果您的同步过程涉及下载不同的文件(例如,图像、文本等)...您可以根据要下载的文件数量(希望它们的重量)来实现进度条。
      • 如果您下载不同的文件,但它们从一个同步到另一个不同,您可以首先询问服务器同步将使用多少个文​​件,以及每个文件的大小。然后同上。

      理想情况下,您必须考虑所接收文件的大小 + 您使用它们所花费的时间。

      【讨论】:

      • 非常感谢您的快速回答。目前我只想下载 json 文件。因此,您发送的链接对我来说应该足够了。我会尝试一下,如果出现问题,请告诉您..
      • 你好,在我的主类中,我创建了一个progressDialog,然后调用了DownLoad File的执行函数。如果连接服务器出错,我想更新进度条中的消息,然后关闭进度对话框。我尝试在 doInBackground 函数的 catch 块中执行此操作,但出现错误:只有原始线程可以修改进度对话框?我该怎么做?我什至无法在 DownLoad 文件类中创建 Toast 消息
      • 那是因为doInBackground方法是在另一个线程中执行的。为了在里面做 UI 的东西,你必须使用 runOnUiThread 方法。查找有关它的信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2019-01-16
      • 2010-11-16
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多