Application + Activity + onResume == NULL POINTER EXCEPTION

时间:2011-07-14 13:17:10

标签: android android-activity nullpointerexception lifecycle

所以我遇到问题我无法在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创建的数组被解除分配? ,如果是这样我怎么办呢?我认为它应该留在那里,因为它是全球应用程序环境的一部分。

附加信息:此活动是启动活动。

2 个答案:

答案 0 :(得分:0)

您不应该将元素[1]与null进行比较,因为整个数组可能为null,尝试访问空数组的一部分将导致异常

答案 1 :(得分:0)

评论时间过长 - 但我猜这可能是一个有用的答案:

我的问题是我有一大堆数据只在初始屏幕中初始化一次。我通过在我的应用程序中设置一个布尔标志来绕过它,我可以使用它检查以确定我的应用程序对象是否填充了数据。在我所有活动的onCreate或onResume中,我首先检查这个标志,如果它是假的,那么我知道我有一个duff应用程序对象所以我只是完成了所有的活动,直到我在我的活动堆栈开始然后启动我的启动画面意图 - 对用户来说,感觉就像重启一样。没有更多神秘的无效指针!我确信有一个更优雅的解决方案(我相信我们应该在onPause中将数据保存到磁盘 - 而不仅仅是依赖于活着的应用程序对象)。

为我工作 - 希望这可以帮助别人。