Asynctask与Progressdialog

时间:2013-01-13 01:43:07

标签: android android-asynctask progressdialog

我正在使用Asynctask来执行一个耗时的方法doStuff(),其中包括分配全局数据结构。调试器确认调用了doStuff(),但是当在Asynctask的末尾绘制新视图时,我在访问全局数据结构时得到空指针异常。这是代码:

public class MyTask extends AsyncTask<Void, Void, Void> {
    protected ProgressDialog dialog;

    public MyTask (Context context) {
        dialog = new ProgressDialog(context);
    }

    @Override
    protected void onPreExecute() { 
       super.onPreExecute();
       dialog.setMessage("Foo");
       dialog.show();    
    }

    @Override
    protected Void doInBackground(Void... params) {
        doStuff();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        dialog.dismiss();
    }
}

我使用new MyTask(this).execute();从多个活动执行Asynctask。

2 个答案:

答案 0 :(得分:2)

AsyncTask是一个真正的后台线程和处理程序的便利包装器。您在后台任务完成之前执行代码。要知道后台任务何时完成,您需要将要执行的代码放在onPostExecute(将在UI /主线程上运行)中完成任务的主活动。有关更多详细信息,请参阅Processes and Threads guide使用AsyncTask部分。

答案 1 :(得分:0)

您必须在使用AsyncTask的活动中声明ProgressDialog