context.getSharedPreferences崩溃应用程序

时间:2014-07-29 11:20:16

标签: android sharedpreferences

我正在尝试在我的应用中使用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));
    }
}

我的申请活动

4 个答案:

答案 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是应用程序的本地。