NullPointerException getDefaultSharedPreferences()

Я продолжаю получать NullPointerException в этой строке:

SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(this);

Я просмотрел некоторые вещи и считаю, что у меня неправильный контекст, поскольку он находится в подпакете основного пакета, поэтому я не думаю, что он может ссылаться на файлы настроек XML. Я без проблем использовал это в классах, которые находятся в основном пакете, но по какой-то причине это вызывает исключение.

Полный код:

package schoolBook.Icestone.Expandable;

import schoolBook.Icestone.Days;
import schoolBook.Icestone.Main;
import schoolBook.Icestone.SetPreference;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class Lesson1 extends Lessons {

    public Lesson1(String name) {
        super(name);
        // setGroup(" " + Days.getLessonarray(0) + " ");
        String key = "W" + Main.getWeek() + "_" + SetPreference.xmlday + "_L"
                + SetPreference.xmllesson + "_Lesson";
        System.out.println(key);
        try {
            SharedPreferences myPreference = PreferenceManager
                    .getDefaultSharedPreferences(this);
            String group = myPreference.getString(key, "def");
            setGroup(" " + group + " ");
        } catch (NullPointerException ex) {
            ex.printStackTrace();
            setGroup(" " + Days.getLessonarray(0) + " ");
        }
    }
}

Lessons класс расширяет активность, поэтому думаю, что это может быть источником моей проблемы, но я не уверен.

Структура файла:

Ледяной камень

  • Main.class and some other classes that use shared preference and it works fine
    • Lessons package (Lesson1 & Lesson are in this package)
  • Папка XML с настройками в ней

если кто-нибудь может помочь пролить свет на эту проблему, это было бы очень признательно


person R3MIX    schedule 22.03.2011    source источник
comment
Поскольку постер не принял ответ. Как указано в ответах, проблема заключается в следующем: -pointer-excep" title="почему getapplicationcontext в конструкторе активности выдает нулевой указатель excep">stackoverflow.com/questions/16004891/   -  person Mr_and_Mrs_D    schedule 01.05.2013


Ответы (1)


Вы не можете сделать это внутри конструктора.

Если он расширяет класс активности, у него не должно быть конструктора, вам нужно обработать это внутри метода oncreate.

person Panthro    schedule 22.03.2011
comment
я запутался, вы имеете в виду, что мне нужен метод onCreate в этом классе или в классе, который он расширяет? - person R3MIX; 22.03.2011
comment
Ваш класс расширяет активность? если да, вы можете переопределить метод onCreate() и поместить свой код в этот метод, см. Жизненный цикл активности - person Panthro; 22.03.2011
comment
Урок расширяет деятельность, а урок 1 расширяет урок. Я попробую и посмотрю, что произойдет. конструктору - person R3MIX; 22.03.2011
comment
забудьте об использовании конструктора внутри этого класса!!! Активность создается системой, весь ваш код должен быть в одном из методов, описанных в Жизненный цикл активности - person Panthro; 23.03.2011
comment
ааа... и когда вы переопределяете метод, такой как onCreate() или onResume(), вы ДОЛЖНЫ вызывать родительский метод, например: super.onCreate() - person Panthro; 23.03.2011
comment
Извините, но я полностью потерялся, мне нужны эти конструкторы, чтобы сформировать мой ExpandableList, и я не вижу, как я могу включить в него onCreate(), чтобы позволить мне получить настройки. - person R3MIX; 23.03.2011
comment
Я все еще застрял в этой проблеме, любая помощь будет принята с благодарностью - person R3MIX; 23.03.2011