java - Android:AsyncTask 中的进度对话框错误

标签 java android android-asynctask progressdialog

我有一些代码在 AsyncTask 中进行一些处理,当它运行时我想显示一个进度对话框。我曾多次希望更新该消息,但遇到了一些麻烦。这是我到目前为止所拥有的:

class ShowDialogAsyncTask extends AsyncTask<Void, String, Void>{

    private ProgressDialog progressSpinner;

        @Override
        protected void onPreExecute() {
        ProgressDialog progressSpinner = new ProgressDialog(MainActivity.this);
        progressSpinner.setTitle("File Download");
        progressSpinner.setMessage("Connecting to Internet");
        progressSpinner.show();
        }

        @Override
        protected Void doInBackground(Void... params) 
        {
            Log.v("doInBackground","1");
            try {
                Log.v("doInBackground","2");
                onProgressUpdate("Downloading File");
                //do some stuff
            } catch (IOException e) {
                result = "Error";
            }

            onProgressUpdate("Complete!");
            SystemClock.sleep(300);
            return null;
        }

        protected void onProgressUpdate(String... values) 
        {
        Log.e("onProgressUpdate",values[0]);
        try{
        progressSpinner.setMessage(values[0]);
        }catch(Exception e){Log.e("onProgressUpdate","Error!");}
        Log.e("onProgressUpdate","Success!");
        }

        @Override
        protected void onPostExecute(Void result) 
        {
        progressSpinner.dismiss();
        vf.showNext();
        }
}

我希望更新消息的代码不起作用,它只是抛出异常。然后,当我尝试关闭进度对话框时,整个事情崩溃了。

我对 Android 开发还很陌生,所以我非常感谢任何指点。

Logcat 条目的情况有点梨形。

03-22 22:59:30.189: W/dalvikvm(8133): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
03-22 22:59:30.189: E/AndroidRuntime(8133): Uncaught handler: thread main exiting due to uncaught exception
03-22 22:59:30.195: E/AndroidRuntime(8133): java.lang.NullPointerException

--更新--

看来我的问题是我声明进度对话框的地方。我最终发现我可以在新创建的构造函数中声明进度对话框,如下所示

progressSpinner = new ProgressDialog(mContext);

然后,它将允许 AsyncTask 类的所有其他方法访问以更新消息。

最佳答案

问题可能是您在创建 ProgressDialog 时如何引用 MainActivity。将公共(public)构造函数添加到您的 AsyncTask 和名为 mContext 的类字段:

        public ShowDialogAsyncTask(Context c){
           mContext = c;
        }

在创建类的对象时在 MainActivity 中传递 this:

         ShowDialogAsyncTask task = new ShowDialogAsyncTask(this);

在您的AsyncTask中,使用该上下文创建ProgressDialog

关于java - Android:AsyncTask 中的进度对话框错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581310/

相关文章:

android - 方向更改后如何将光标移动到 EditText 行的末尾?

android - 将自定义对象写入 Firebase 数据库

android - Firebase android如何一次从键列表中获取数据

java - LinkedHashMap containsKey 或 containsValue

Java catch Exception IllegalArguementsException 强制我启动字符串

java - SimpleJdbcCall 不适用于存储函数

java - 如何从基础应用程序访问方法?

android - 如何在调用新的异步任务时终止以前的任务

android - 异步任务在不同的 Activity 中开始和结束

java - 帮助在 hadoop 上运行 Taste Grouplens 演示