我的项目中有这个类:
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() 根本不会被调用或处理。