我的Mainactivty Oncreate()方法中有3个异步任务当用户打开应用程序时我想在加载3个asynctasks时显示进度对话框。 请说明我从哪里开始并驳回进程对话。 如有任何样品请提供链接。 谢谢。
答案 0 :(得分:2)
实际上你得到了代码怎么做。此外,我建议您在调用AsyncTask
之前必须创建并显示进度对话框。由于你有3个AsyncTasks,如果从服务器获取内容,你根本不能说哪个是最后一个任务。如果你有这样的情况,那么在每个任务中制作3个标志,如boolean task1, task2, task3;
和onPostExecute
方法,将相应的标志设为true,并检查这些标志是否为真if(task1 && task2 && task3) progressDialog.dismiss();
。因此,对于最后一个任务,它将把它的标志设置为true,并且2个标志将已经设置为true,因此当条件为真时它将关闭进度对话框。希望你明白了。
答案 1 :(得分:1)
您可以声明进度条。然后在onPreExecute中,显示进度条。在doInBackground中,您可以计算进度值并调用publishProgress来显示进度值。在onPostExecute中,您可以关闭进度条。
您可以这样做:
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private ProgressDialog mProgressDialog;
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading data file..");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
private class DownloadZipFileTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... urls) {
Long progress;
calculate progress
publishProgress("" + progress);
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
答案 2 :(得分:0)
您可以在第一个AsyncTask的onPreExecute方法中启动进度对话框,并且当为任何AsyncTask调用onPostExecute时,您可以检查是否已完成其他AsyncTask,如果是,则关闭对话框,否则让它运行。 或者,您可以为每个AsyncTask启动一个单独的进度对话框,并在完成相应的AsyncTask时将其关闭。
答案 3 :(得分:0)
最好在第一个异步类中启动进度条,并使用相同的对象关闭最后一个异步类中的进度条....剩下的就剩下了。
obj.dismiss();
答案 4 :(得分:0)
这是您的ayncTask,并使用new Async(Your_Context).execute();
private class Async extends AsyncTask<String, String, Boolean>
{
Context context;
ProgressDialog pd;
Progress progress;
Async (Context mcontext)
{
context = mcontext;
pd = new ProgressDialog(activityContext);
progress = new Progress(context);
}
@Override
protected void onPreExecute()
{
pd.setTitle("Loading..");
pd.setMessage("Please Wait..");
pd.setCancelable(false);
pd.show();
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params)
{
return flag;
}
@Override
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
pd.setMessage("Please Wait..." + values[0].toString());
}
public class Progress
{
public ServerToApp task;
public Progress(ServerToApp task)
{
this.task = task;
}
public void publish(String value)
{
task.publishProgress(value);
}
}
@Override
protected void onPostExecute(Boolean result)
{
super.onPostExecute(result);
if(pd.isShowing()) pd.dismiss();
}
}
为了更新进度,你应该从你的方法中传递这样的值
progress.publish(Values);
希望它会对你有所帮助。