【发布时间】:2011-10-05 08:15:18
【问题描述】:
所以我遇到了一些问题,我无法在 Android 中解决问题。
我的程序使用 Application 类来存储全局变量。
我有以下内容
public ExampleClass SetOfExamples[];
@Override
public void onCreate() {
super.onCreate();
_appCtrl = this;
SetOfExamples = new ExampleClass[10];
// ARRAY IS INITED HERE - all entrys are setup.
}
然后在我有的活动中
protected void onResume() {
super.onResume();
appState = ((MyApplication)this.getApplication());
if(appState!=null)
{
if(appState.SetOfExamples[1]!=null)
{
// Do stuff
}
else
{
// What do I do ???
}
}
}
通常在已部署的应用程序中(但永远无法复制自己!!!),它属于代码的“我该做什么”部分。
那为什么会这样呢? ,如何在调用 myapplication create 之前恢复我的活动? 或者是由 myapplication 创建的数组被释放? ,如果是这样,我该怎么做?我认为它应该留在那里,因为它是全局应用程序上下文的一部分。
附加信息:此活动是启动活动。
【问题讨论】:
-
您应该按此顺序检查 (appState.SetOfExamples != null && appState.SetOfExamples.length >= 2 && appState.SetOfExamples[1] != null)。确保数组指针不为空,数组索引有效,索引位置 1 的数组不为空
-
在您发布的代码中,数组 SetOfExamples 的每个成员都没有被初始化,因此稍后其中一个为 null 也就不足为奇了。可能只是在您选择引用的代码中遗漏了,但除非您清理 sn-p,否则人们只会看到这一点。
-
好的,添加评论。我知道应该有额外的保护等。我的问题是 - 为什么我的应用程序中的 oncreate 没有调用?
-
也看到了类似的问题。我的应用程序也依赖于我的应用程序类中保存的数据。有时我的活动的 onResume 会尝试从应用程序中获取数据,但它返回 null。就好像应用程序对象已被销毁,并为我的应用程序分配了一个新对象。
-
是的,这是一个非常烦人的问题,我现在正在处理它。我认为您是对的@DeanWild,创建了一个新实例,但是旧实例仍在内存中漂浮,就像逃跑的太空粪便一样。
标签: android android-activity nullpointerexception lifecycle