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