0

我的项目中有这个类:

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)。我不能使用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):在 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() 方法中声明的文件似乎总是为空,就好像它们根本没有声明一样:当我尝试访问它们时,为了读取或写入,我得到了一个空指针异常。而事实上“达到了要点”。永远不会显示,就好像 onCreate() 根本不会被调用或处理。

4

2 回答 2

3

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

您可以getFilesDir直接调用而无需private Context context;.

于 2013-04-14T20:55:41.730 回答
0

替换this.contextgetActivity()

于 2015-03-31T11:28:19.770 回答