我目前正在编写一个类,使用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());
}
我真的很感激对此的一些帮助,因为我对可能导致问题的原因感到困惑。
答案 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);