使用SharedPreferences保存时出错

时间:2013-02-18 17:17:59

标签: android sharedpreferences

我使用sharedpreferences保存了一些变量,但是我的save方法使用空指针异常崩溃了应用程序。

public void save() {

    SharedPreferences sp = context.getSharedPreferences(saveFile, Context.MODE_PRIVATE);
    //Use the editor for easier management, no calling edit and commit so many times. 
    SharedPreferences.Editor editor = sp.edit();

    editor.putInt("X", player.getX());
    editor.putInt("Y", player.getY());
    editor.putInt("level", player.getLevel());
    editor.putFloat("xp", player.getXp());
    editor.commit();
}

getSharedPreferences()不能单独工作,需要有上下文。在它之前,这可能是一个问题。我已经定义了上下文,导入了SharedPreferences,那为什么这不起作用?

编辑:这是logcat

02-18 20:21:49.958: E/AndroidRuntime(1005): FATAL EXCEPTION: Thread-89
02-18 20:21:49.958: E/AndroidRuntime(1005): java.lang.NullPointerException
02-18 20:21:49.958: E/AndroidRuntime(1005): at com.package.game.GameScreen.save(GameScreen.java:856)
02-18 20:21:49.958: E/AndroidRuntime(1005): at com.package.game.GameScreen.updateLevelUp(GameScreen.java:364)

保存方法在上面和行:

SharedPreferences sp = context.getSharedPreferences(saveFile, Context.MODE_PRIVATE);

是第856行.updateLevelUp是玩家升级时调用的方法,当退出该屏幕时游戏恢复并且调用save()。

2 个答案:

答案 0 :(得分:1)

您的context变量为null。确保它已初始化,并且您没有在相应onCreate()的{​​{1}}之前调用此代码。

答案 1 :(得分:0)

作为一个好规则,您希望在管理SharedPreferences时使用SharedPreferences.Editor

这是一种更简单的方法:

public void save() {
    SharedPreferences saveFile = context.getSharedPreferences(loadSave, Context.MODE_PRIVATE);
    //Use the editor for easier management, no calling edit and commit so many times. 
    SharedPreferences.Editor editor = saveFile.edit();

    editor.putInt("x", player.get());
    editor.putInt("Y", player.getY());
    editor.putInt("level", player.getLevel());
    editor.putFloat("xp", player.getXp());

    //Save changes now
    editor.commit();
}

此外,如果在此实现后仍然获得nullpointer,请确保发布日志以便我们可以跟踪异常。