AsyncTask中的ProgressDialog没有更新或解除

时间:2011-08-16 18:06:35

标签: android dialog progress dismiss

我正在使用AsyncTask来处理复杂的后台操作(编译要发送的日志文件),我使用ProgressDialog来显示用户进度。我已经尝试过使用showDialog()但它似乎永远不会显示或解散(它永远不会被调用),我按照教程了解如何做到这一点...... 所以我使用的是非托管的,它不会忽略我的信息。我也想更新消息,因为它开始编译日志文件(因为它似乎滞后于那里 - 或者文本视图可能很长,因此它不会像它应该的那样更新)。

我已将代码移动一点,所以看起来有问题(比如onProgressUpdate()),但我不知道如何让它工作。我环顾了这个网站,似乎没有任何问题我(不完全相反)。 RunOnUiThread()不起作用,新的Thread(){}不起作用,onProgressUpdate()我无法工作(文档令人困惑)。

它也永远不会解散。我已经建立了一个听众,它永远不会解散。

有谁知道我的代码出了什么问题?我认为AsyncTask应该很简单。

        private class BuildLogTask extends AsyncTask<Void, Void, String> {
        String temp;
        ProgressDialog progressdialog = new ProgressDialog(context); //variable is defined at onCreate (held as private, not static)

        @Override
        protected String doInBackground(Void... params) {
            temp = buildLog();
            logdata = temp;
            publishProgress();
            createLogFile();
            return temp;
        }

        protected void onProgressUpdate() {
            progressdialog.setMessage("Compiling Log File...");
        }

        @Override
        protected void onPreExecute() {
            Log.w(TAG,"Showing Dialog");
            send.setEnabled(false);
            ProgressDialog progressdialog = new ProgressDialog(context);
            progressdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressdialog.setMessage("Gathering Data...");
            progressdialog.setCancelable(false);
            progressdialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

                @Override
                public void onDismiss(DialogInterface dialog) {
                    Log.e(TAG,"Progress Dialog dismissal.");

                }
            });
            progressdialog.show();
        }

        @Override
        protected void onCancelled(){
            Log.e(TAG,"Progress Dialog was Cancelled");
            progressdialog.dismiss();
            logdata=null;
        }

        @Override
        protected void onPostExecute(String result) {
            progressdialog.dismiss();
            send.setEnabled(true);
            previewAndSend();
        }

    }

3 个答案:

答案 0 :(得分:2)

你有两个不同的进度对话框,一个是onPreExecute()的本地对象,另一个是全局的。你在onPostExecution()中解雇的那个是你从未真正展示过的全局版本。删除本地声明,它应该工作。

答案 1 :(得分:0)

有两个问题。

  1. onProgressUpdate上的签名不正确。试试这个:

    @覆盖 protected void onProgressUpdate(Void ... progress){     progressdialog.setMessage(“编译日志文件......”); }

  2. 您在onPreExecute()中使用局部变量屏蔽progressDialog成员变量

  3. 编辑:发现第二个问题:

答案 2 :(得分:0)

试试吧,

替换:

progressdialog.show();

有关:

progressdialog = progressdialog.show();
祝你好运。