Application + Activity + onResume == ИСКЛЮЧЕНИЕ NULL - PullRequest
3 голосов
/ 14 июля 2011

Так что у меня проблема, я просто не могу разобраться в 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 голосов
/ 10 июля 2012

Слишком долго для комментария - но это может быть полезным ответом. Я думаю, что так и будет:

Моя проблема в том, что у меня загружена информация, которая инициализируется только один раз на заставке.Я обошел его, установив логический флаг в своем приложении, который я мог использовать для проверки, чтобы точно знать, что объект моего приложения заполнен данными.В onCreate или onResume всех моих действий я сначала проверяю этот флаг, если он ложный, тогда я знаю, что у меня есть объект приложения duff, поэтому я просто завершаю все свои действия, пока не нахожусь в начале своего стека активности, затем запускаюмое намерение заставки - для пользователя это просто похоже на перезагрузку.Нет больше тайных нулевых указателей!Я уверен, что есть более элегантное решение (я считаю, что мы должны сохранять данные на диске в onPause, а не полагаться только на то, чтобы объект приложения оставался в живых).

Работало для меня - надеюсь, это поможет другим.

0 голосов
/ 14 июля 2011

Не следует сравнивать элемент [1] со значением NULL, поскольку весь ваш массив может иметь значение NULL, попытка получить доступ к части массива NULL приведет к исключению

...