[英]Android class constructor not initiating, causing context null pointer exception?
我目前正在编写一个类,以使用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());
}
对此我深表歉意,因为我对可能导致问题的原因感到困惑。
首先初始化成员变量,然后才调用构造函数。 因此,当mContext
仍为默认null
值时,将初始化对话框。
将对话框初始化移至构造函数,或者更好的是onPreExecute()
。
我相信问题出在以下地方:
private final ProgressDialog dialog = new ProgressDialog(mContext);
那是一个类级别的变量,赋值在构造函数之前运行。 因此,此时mContext为null。
只需声明而无需分配:
private final ProgressDialog dialog;
...并将其设置在构造函数中(设置mContext之后):
dialog = new ProgressDialog(mContext);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.