我使用doInBackGround和AsyncTask方法显示进度如下:
class UploadFile extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... aurl) {
upload(ActionUrl, uploadFile, savepath, newName);
return null;
}
protected void onProgressUpdate(String... progress) {
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
upload(ActionUrl, uploadFile, savepath, newName);
方法是this。
以下代码:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading file...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(true);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
以下致电:
private ProgressDialog mProgressDialog;
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
new UploadFile().execute("test");
但进度对话框始终显示0%,并且永不更新。 如何修改以更新它?
答案 0 :(得分:1)
您将需要创建第二个线程来跟踪进度并将其报告给此活动。这是一个链接,其中有一个示例,说明如何完成此操作: http://developer.android.com/guide/topics/ui/dialogs.html
在此链接中查找“带有第二个线程的示例ProgressDialog”
答案 1 :(得分:1)
您必须在publishProgress(...)
方法中致电doInBackground(...)
。这是导致onProgressUpdate(...)
被调用的原因。 onProgressUpdate(...)
不会被神奇地称为。
它旨在实现多用途,您有责任通过publishProgress(...)
使用您希望其发布的“进度”数据来触发它。它可以是数字,例如10
为10%,或者是字符串,例如First file downloaded...
。
AsyncTask
班级不知道您要发布什么内容或何时发布 - 这就是publishProgress(...)
对doInBackground(...)
的调用意图。