繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM