Application + Activity + onResume == NULL POINTER EXCEPTION
Posted
技术标签:
【中文标题】Application + Activity + onResume == NULL POINTER EXCEPTION【英文标题】: 【发布时间】: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,创建了一个新实例,但是旧实例仍在内存中漂浮,就像逃跑的太空粪便一样。 【参考方案1】:您不应该将元素 [1] 与 null 进行比较,因为您的整个数组可能为 null,尝试访问 null 数组的一部分会导致异常
【讨论】:
【参考方案2】:评论太长了 - 但我想这可能是一个有用的答案,所以这里是:
我的问题是我有大量数据在启动画面中只初始化一次。我通过在我的应用程序中设置一个布尔标志来解决它,我可以用它来检查以确保我的应用程序对象填充了数据。在我所有活动的 onCreate 或 onResume 中,我首先检查此标志,如果它为假,那么我知道我有一个 duff 应用程序对象,所以我只需完成所有活动,直到我处于活动堆栈的开头然后启动我的闪屏意图 - 对用户来说,它就像重新启动一样。不再有神秘的空指针!我确信有一个更优雅的解决方案(我相信我们应该在 onPause 中将数据持久化到磁盘 - 而不仅仅是依赖于应用程序对象保持活动状态)。
为我工作 - 希望这可以帮助其他人。
【讨论】:
以上是关于Application + Activity + onResume == NULL POINTER EXCEPTION的主要内容,如果未能解决你的问题,请参考以下文章
Application + Activity + onResume == NULL POINTER EXCEPTION
Android application 和 activity 标签详解
AAPT:错误:在 <manifest><application><activity> 中发现了意外元素 <activity>