我要谈谈发生在我身上的事情。我正在开发一个日志系统文件,所以我创建了一个新类,我想为我的所有应用程序和这个类的许多实例做不同的日志。所以我想在类似于单例类的应用程序类上创建我的类的受保护或公共对象。
所以我有类似的东西:
public class MyApp extends Application {
protected LogApp logApp = new LogApp(getFilesDir());
当我从我的主类中调用它以获取列表文件时:
public class LogApp {
public File dirFiles;
//file parameter can't be null, the app will crash
public LogApp(File file){
dirFiles = file;
}
public File[] getListFiles(){
return dirFiles.listFiles()
}
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
MyApp myApp = (MyApp)getApplicationContext();
File file[] = myApp.logApp.getListFiles();
}
这让我遇到了 nullPointException 错误。
这种情况下的解决方案非常简单,让我同时感到笨拙和自豪。
我无法在 MyApp 的声明空间中调用 getFilesDir,因为此时没有获取该 Dir 的上下文。 Android App 中的执行顺序是:Application --> Activity。就像 Manifest 文件中所说的那样。
解决方案?在 MyApp 类的 onCreate 事件中创建我的对象,如下所示:
public class MyApp extends Application {
protected LogApp logApp;
void onCreate(){
logApp = new LogApp(getFilesDir());
所以现在我可以在我的主类中以同样的方式使用它,因为我的 MainActivity 的一个实例在上下文类的最后一个实例中扩展。
也许我对可能的解释有误,这不是真正发生的术语含义以及 android 的工作原理。如果有人比我更了解为什么会这样,我邀请您消除我们的疑虑。
希望对你有帮助。