我正在尝试在我的应用中使用SharedPreferences,但它会崩溃我的应用。
我要做的是让SharedPreferences在多个活动中工作。
以下是代码:
public class Question{
boolean answered;
int id;
String userAnswer;
String QuestionP = LogoQuiz.QuestionP;
public Question(int i, Context context){
SharedPreferences pref = context.getSharedPreferences(QuestionP, context.MODE_PRIVATE);
id = i;
answered = false;
}
}
用于保存问题状态的课程
public class Main extends Activity {
public static ArrayList<Question> ques;
public static final String QuestionP = "QuestionSettings";
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences pref = getSharedPreferences(QuestionP, MODE_PRIVATE);
Editor editor = pref.edit();
-------- activity ----------
-------- activity ----------
ques = new ArrayList<Question>();
ques.add(new Question(i, null));
}
}
我的申请活动
答案 0 :(得分:1)
更改
ques.add(new Question(i, null));
到
ques.add(new Question(i, Main.this));
您正在null
构建器中传递Question
,然后尝试在其上调用getSharedPreferences
,以便获得NullPointerException
或者因为你没有在构造函数中的任何地方使用pref
,所以将构造函数更改为
public Question(int i)
{
id = i;
answered = false;
}
并在Main
活动更改中
ques.add(new Question(i, null));
到
ques.add(new Question(i));
答案 1 :(得分:0)
在将对象添加到arraylist
时将上下文传递给您的问题类对象ques.add(new Question(i, null));
您在问题的构造函数中使用了上下文,但未在此处提供任何上下文,请将其更改为:
ques.add(new Question(i, Main.this));
答案 2 :(得分:0)
您正在调用null的Context上的getSharedPreferences。因此,您得到 NullPointerException ,因为您无法在null上调用getSharedPreference。你必须使用
ques.add(new Question(i, this));
你也应该声明变量“i”。
答案 3 :(得分:0)
我们无法将上下文作为null传递给您提问java类。我们可以使用Application / Activity上下文获取共享的pref值。这里你在ques.add中传递了上下文为null(new Question(i,null));这意味着你正试图从空上下文中获取共享pref,这是你获得空指针异常并且你的应用程序崩溃的原因。
请将您的方法调用更改为
ques.add(new Question(i, Main.this));
这里Main.this是指你的活动背景。您也可以在此处传递getapplicationContext(),因为sharedPref是应用程序的本地。