Android 主活动中的异步任务如何显示进度日志

Android 主活动中的异步任务如何显示进度日志,android,android-asynctask,progressdialog,oncreate,Android,Android Asynctask,Progressdialog,Oncreate,我在Mainactivty Oncreate()方法中有3个异步任务,当用户打开应用程序时,我希望在加载3个异步任务时显示进度对话框。 请指定从何处开始并取消“进程”对话框。 如果有任何样本,请提供一个链接。 谢谢。您可以在第一个AsyncTask的onPreExecute方法中启动进度对话框,当为任何AsyncTask调用onPostExecute时,您可以检查其他AsyncTask是否完成,如果是,请关闭对话框,否则让它运行。 或者,您可以为每个异步任务启动一个单独的进度对话框,并在相应的异

我在Mainactivty Oncreate()方法中有3个异步任务,当用户打开应用程序时,我希望在加载3个异步任务时显示进度对话框。 请指定从何处开始并取消“进程”对话框。 如果有任何样本,请提供一个链接。
谢谢。

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

您可以声明进度条。然后在onPreExecute中,显示progressbar。在doInBackground中,您可以计算进度值并调用publishProgress来显示进度值。在onPostExecute中,您可以关闭progressbar

您可以这样做:

    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);
        }
}
publicstaticfinal int DIALOG\u DOWNLOAD\u PROGRESS=0;
private ProgressDialog mProgressDialog;
@凌驾
受保护的对话框onCreateDialog(int id){
开关(id){
案例对话框\u下载\u进度:
mProgressDialog=新建进度对话框(此);
setMessage(“下载数据文件…”);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_水平);
mProgressDialog.setCancelable(假);
mProgressDialog.show();
返回mProgressDialog;
违约:
返回null;
}
}
私有类DownloadZipFileTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
showDialog(对话框下载进度);
}
@凌驾
受保护的字符串doInBackground(字符串…URL){
长期进展;
计算进度
出版进度(“+”进度);
}
受保护的void onProgressUpdate(字符串…进度){
Log.d(“ANDRO_ASYNC”,progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@凌驾
受保护的void onPostExecute(字符串结果){
dismissDialog(对话框下载进度);
}
}

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

obj.dismiss();

这是您的ayncTask,并使用
new Async(您的_上下文)调用它


希望它能对您有所帮助。

事实上,您已经掌握了如何操作的代码。此外,我建议您在调用
AsyncTask
之前必须创建并显示一个进度对话框。由于您有3个异步任务,所以若要从服务器获取某些内容,就无法确定最后一个任务是哪个。如果您有这种情况,则制作3个标志,如
boolean task1、task2、task3
并在每个任务的
onPostExecute
方法中,将各自的标志设置为true,并检查这些所有标志是否为true,如
if(task1&&task2&&task3)progressDialog.disease()。所以,对于最后一个任务,它将把它的标志设置为true,两个标志将已经设置为true,因此当条件为true时,它将关闭进度对话框。希望您能收到。

您有什么代码可以提供给我们吗?到目前为止您做了什么?您可以在第一个异步任务执行前启动它,并在最后一个异步任务执行后关闭它。我认为不确定的进度条将是最好的解决方案。您可以使用进度条并在其中更新进度条
onProgressUpdate
方法。干杯为什么三个不是一个?嗨。。如果这个答案帮助你解决了问题,请接受这个答案,这样其他人就可以知道正确的答案,线程也会变得更有用。谢谢你的回答,我也有同样的想法,我正在寻找其他解决方案。。
    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);