Android类构造函数没有启动,导致上下文空指针异常?

时间:2014-01-24 11:57:21

标签: android constructor nullpointerexception android-context

我目前正在编写一个类,使用AsyncTask将一些数据导出到CSV。我编写了类,但是当我调用它的构造函数并传入要设置的上下文时,我在类中的Context上得到一个空指针异常。我的CSV编写器类如下:

public class ExportCSVTask extends AsyncTask<String, Void, Boolean> {

        Context mContext;

        public ExportCSVTask(Context context){
            Log.e("Error in MainActivity","Inside the Constructor");
            mContext = context;
        } 

        private final ProgressDialog dialog = new ProgressDialog(mContext);

我已经调试了应用程序,发现它确实击中了“ExportCSVTask”并传递了正确的上下文,但是它没有做任何跳过它的任何事情。我创建了一个Log消息来测试它,看起来构造函数中没有任何内容正在执行,我不知道为什么。我还把下面的代码放在启动构造函数的地方:

try
                {
                    ExportCSVTask task = new ExportCSVTask(getApplicationContext());
                    task.execute("");
                }
                catch(Exception ex)
                {
                    Log.e("Error in MainActivity",ex.toString());
                }

我真的很感激对此的一些帮助,因为我对可能导致问题的原因感到困惑。

2 个答案:

答案 0 :(得分:0)

首先初始化成员变量,然后才调用构造函数。因此,当mContext仍处于默认null值时,您的对话框已初始化。

将对话框初始化移至构造函数,或者更好的是onPreExecute()

答案 1 :(得分:0)

我认为问题在于您有这样的陈述:

private final ProgressDialog dialog = new ProgressDialog(mContext);

这是一个类级变量,赋值在构造函数之前运行。因此,在那时,mContext为null。

只需在没有作业的情况下声明:

private final ProgressDialog dialog;

...并在构造函数中设置它(在设置mContext之后):

dialog = new ProgressDialog(mContext);