我使用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()。
答案 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,请确保发布日志以便我们可以跟踪异常。