AsyncTask 和进度条 [重复]
Posted
技术标签:
【中文标题】AsyncTask 和进度条 [重复]【英文标题】:AsyncTask and Progress Bar [duplicate] 【发布时间】:2014-02-05 21:14:51 【问题描述】:我有发送(多个文本文件)到服务器的应用程序,每个文件发送和获取响应都会更新进度条。一旦所有文件都发送完毕,它就会被关闭。
我已经通过在循环中调用发送函数成功地实现了这一点,并且进度条得到了更新。现在我想 AsyncTask 为每个文件执行 http 请求,同时进度条也得到更新。
如何定义 AsyncTask 以发送特定文件并获得响应。在它发送的每个文件上,进度条也会更新?
任何帮助将不胜感激。
谢谢
-山姆
【问题讨论】:
您到底想知道什么?如何将参数传递给 AsyncTask?或者如何从 Asynctask 更新 ProgressBar? 我在进度条循环内调用new PostDataAsyncTask().execute(currentFile)
,它会抛出异常,即不能在非 UI 线程中调用 AsyncTask。然后如何更新 ProgressBar 以及在哪里创建 AsyncTask 实例?
【参考方案1】:
如果您想更新您的ProgressBar
,同时仍在您的AsyncTask
中执行,您应该...
在您的AsyncTask
中实现onProgressUpdate(...)
方法。
如果您想在doInBackground(...)
期间更新进度条,请致电publishProgress(...)
AsyncTask documentation 中有一个这样的例子。
【讨论】:
【参考方案2】:您必须从主/UI 线程调用 AsyncTask。您不能从后台线程启动 AsyncTask。
尝试从 onCreate() 调用 new PostDataAsyncTask().execute(currentFile)
。
正如 Yjay 所说,您可以使用 onProgressUpdate()
和 publishProgress()
来更新 ProgressBar 的值。
【讨论】:
【参考方案3】:这个问题在很多地方都被问及过。关键是使用doInBackground()
方法执行网络活动,然后您可以根据需要从那里调用publishProgress()
以更新对话框。您还需要覆盖 onProgressUpdate()
,因为这是 publishProgress()
调用的方法,并且您将在其中放置对话框代码。
AsyncTask
android how to work with asynctasks progressdialog
Download a file with Android, and showing the progress in a ProgressDialog
How to use Asynctask effectively
How to use AsyncTask correctly in Android
更多...
【讨论】:
在主 UI 线程中单击按钮时,我的进度条会在一个新线程中生成。然后我在哪里实例化 AsyncTask?在这种情况下,我该如何启动 progressBar? 这个想法是,您启动 AsyncTask 以进行网络 I/O 以发送文件,一旦文件完成,您可以调用publishProgress()
,可选地使用一些参数。一旦你这样做,它会触发onProgressUpdate()
,这就是你应该更新你的 ProgressBar 的地方。不是您通过“单击按钮时产生一个新线程”来描述它的方式。请阅读文档和链接。以上是关于AsyncTask 和进度条 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
水平进度条不适用于 Asynctask Android 下载文件?
自定义对话框片段内的进度条 - 如何从 AsyncTask 传递进度?