0

我正在使用 sharedpreferences 保存一些变量,但我的保存方法使应用程序崩溃并出现空指针异常。

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()。

4

2 回答 2

1

你的context变量是null. 确保它已被初始化,并且您没有onCreate()在相应的Context.

于 2013-02-18T20:34:18.190 回答
0

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

这是一个更简单的方法:

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();
}

此外,如果您在此实施后仍然得到空指针,请确保您发布日志以便我们可以追踪异常。

于 2013-02-18T17:27:10.090 回答