Application context始终返回null

时间:2013-04-14 20:49:56

标签: android android-context

我的项目中有这个课程:

public class MyClass extends Application {

    // some stuff

    private Context context;

    public MyClass() {
        processContext();
        APP_DIRECTORY = context.getFilesDir();
        PRIVATE_FILE = new File(APP_DIRECTORY, MD5(getIEMI()));
    }


    public void processContext() {
        do {
            this.context = this.getApplicationContext();
        } while (this.context==null);
    }

    // some other stuff, such as reading or writing above declared files

    public String getIEMI() {
        String IMEI;
        Boolean hasTelephony = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
        if(hasTelephony) {
            TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
            IMEI = telephonyManager.getDeviceId();
        } else {
            IMEI = "IMEI_not_AVAIABLE";
        }
        return IMEI;
    }
}

但是我在调​​用context的任何地方都得到了NullPointerException(LogCat),即使我试图遵循提议的here提示(模拟器中的错误)。 我不能使用context = MyClass.this,因为我总是(并且只)获得NullPointerException。

  

04-14 20:25:28.063:E / AndroidRuntime(1084):引起:   java.lang.NullPointerException 04-14 20:25:28.063:   E / AndroidRuntime(1084):at   android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100)   04-14 20:25:28.063:E / AndroidRuntime(1084):at   com.example.mypackage.MyClass.processContext(MyClass.java:71)//这是APP_DIRECTORY = context.getFilesDir();

的行

事实上,我不确定在Android中完全理解Context的定义。我非常有信心将课程扩展到超级Application课程就足够了。

我不能用参数作为上下文来构造类,从调用者到达(以这种方式:(new MyClass(MainActivity.this)))因为我需要读取和写入文件,即使是来自不是Activity类的扩展名。

我生气了,说实话......

- 编辑 -

出于测试目的,我重新编写了类,以便以这种方式构建它:

    public MyClass(Context app_context) {
        APP_CONTEXT = app_context;
        APP_DIRECTORY = APP_CONTEXT.getFilesDir();
    }

调用getFilesDir()时,它总是返回NullPointerException。

- 编辑2 -

正如评论中所建议的,我添加了onCreate()的声明:

    @Override
    public void onCreate() {
        super.onCreate();
        Context context = this.getApplicationContext();
        APP_DIRECTORY = getFilesDir();
        LOGIN_FILE = new File(APP_DIRECTORY, name);

        Log.e("MyApp", "Main point reached.");
    }

这样一切看起来都不错。但是在onCreate()方法中声明的文件似乎总是为null,就好像它们根本没有被声明一样:当我尝试访问它们时,为了读取或写入,我得到了一个空指针异常。事实上“达到了主要目标”。永远不会显示,就好像永远不会调用onCreate(),也不会处理它。

2 个答案:

答案 0 :(得分:3)

应用程序是上下文。尽量不要使用构造函数,而是使用onCreate。

您可以在没有getFilesDir的情况下直接致电private Context context;

答案 1 :(得分:0)

this.context替换为getActivity()