Java SharedReferences NullPointerException

Java SharedReferences NullPointerException,java,android,nullpointerexception,sharedpreferences,Java,Android,Nullpointerexception,Sharedpreferences,我一直在这一行收到NullPointerException: SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(this); 我运行了一些东西,我认为我有错误的上下文,因为它在主包的子包中,所以我认为它不能引用XML首选项文件。我在主包中的类中使用了它,没有任何问题,但由于某种原因,这会导致异常 完整代码: package schoolBook.Icestone.Expandab

我一直在这一行收到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) + " ");
        }

    }
}
class扩展了活动,因此认为这可能是我的问题的根源,但我不确定我是否需要此构造函数来创建可扩展列表视图的标题

任何帮助都将不胜感激


如果有人能帮助解决这个问题,我们将不胜感激

您需要将此代码放到Activity方法onCreate中。不能将活动实例化为常规类

将构造函数中的内容放入如下方法中:

public void onCreate(Bundle bundles) {

}
public Lesson1(String name, Context context) {
    super(name);

    SharedPreferences myPreference = 
      PreferenceManager.getDefaultSharedPreferences(context);

    // Your other code

}
只有这样,上下文才能以正确的方式提供,并且

this
将引用正确的上下文

编辑:

你可以这样做:

public void onCreate(Bundle bundles) {

}
public Lesson1(String name, Context context) {
    super(name);

    SharedPreferences myPreference = 
      PreferenceManager.getDefaultSharedPreferences(context);

    // Your other code

}

您需要将此代码放入Activity方法onCreate中。不能将活动实例化为常规类

将构造函数中的内容放入如下方法中:

public void onCreate(Bundle bundles) {

}
public Lesson1(String name, Context context) {
    super(name);

    SharedPreferences myPreference = 
      PreferenceManager.getDefaultSharedPreferences(context);

    // Your other code

}
只有这样,上下文才能以正确的方式提供,并且

this
将引用正确的上下文

编辑:

你可以这样做:

public void onCreate(Bundle bundles) {

}
public Lesson1(String name, Context context) {
    super(name);

    SharedPreferences myPreference = 
      PreferenceManager.getDefaultSharedPreferences(context);

    // Your other code

}

我不确定,但您在构造函数中对“this”的引用是否会导致此问题?我这样问是因为你在构造函数中,“this”可能没有完全初始化。你是说Lessons类扩展了活动吗?是的,我认为是this位导致了错误和Lessons。class确实扩展了活动,那么Lesson1.class扩展了Lesson我不确定,但是您在构造函数中对“this”的引用会导致问题吗?我问你是因为你在构造器里,“this”可能没有完全初始化。你是说课程类扩展了活动吗?是的,我认为是this位导致了错误和课程。类确实扩展了活动,那么Lesson1.class扩展了Lesson但是我怎么称呼它呢?因为课程永远不会被创建,因为它只是一堆构造函数如果你不打算开始课程的话作为一项活动,SharedReferences需要从类外的上下文中获取,然后通过方法或构造函数传递给它。因此,在我的主类中,我可以创建一个方法来传递第1课的上下文?请参阅我的编辑。将上下文作为参数传递可以解决您的问题。但是,我怎么称呼它为“课程永远不会创建”,因为它只是一堆构造函数如果您不打算将课程作为一项活动开始,SharedReferences需要从类外的上下文获取,然后通过方法或构造函数传递给它。因此,在我的主类中,我可以创建一个方法来传递Lesson1的上下文?请参阅我的编辑。将上下文作为参数传递可以解决问题。