2

当用户打开应用程序时,我的 Mainactivty Oncreate() 方法中有 3 个异步任务,我想在加载 3 个异步任务时显示进度对话框。请指定我从哪里开始并关闭进程对话。如果有样品请提供链接。谢谢你。

4

5 回答 5

2

实际上你得到了如何做的代码。此外,我会建议,您必须在调用AsyncTask. 由于您有 3 个 AsyncTasks,因此如果您从服务器获取某些内容,您根本无法说出哪个将是最后一个任务。如果你有这种情况,那么boolean task1, task2, task3;onPostExecute每个任务的方法中制作 3 个标志,将各自的标志设置为 true 并检查这些所有标志是否为 true if(task1 && task2 && task3) progressDialog.dismiss();。因此,对于最后一个任务,它会将其标志设置为真,并且 2 个标志将已设置为真,因此当条件为真时,它将关闭进度对话框。希望你明白了。

于 2013-08-21T05:05:13.553 回答
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);
        }
}
于 2013-08-21T03:59:30.867 回答
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);

希望它会帮助你。

于 2013-08-21T04:20:06.983 回答
0

最好在第一个异步类中启动进度条并使用相同的对象关闭最后一个异步类中的进度条.... 剩下的。

obj.dismiss();
于 2013-08-21T04:13:04.667 回答
0

您可以在第一个 AsyncTask 的 onPreExecute 方法中启动进度对话框,当为任何 AsyncTask 调用 onPostExecute 时,您可以检查其他 AsyncTask 是否已完成,如果是则关闭对话框,否则让它运行。或者,您可以为每个 AsyncTask 启动一个单独的进度对话框,并在完成各自的 AsyncTask 时将其关闭。

于 2013-08-21T03:56:34.087 回答