【发布时间】:2013-02-18 17:17:59
【问题描述】:
我正在使用 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)
save方法如上及行:
SharedPreferences sp = context.getSharedPreferences(saveFile, Context.MODE_PRIVATE);
是第 856 行。updateLevelUp 是当玩家升级和退出该屏幕时调用的方法,游戏恢复并调用 save()。
【问题讨论】:
-
发布堆栈跟踪。哪一行是空的?
-
考虑保存对
safeFile.edit()的引用并调用commit()一次。 -
"loadSave" 在逻辑上似乎为空
-
@EvZ 可能是
context、players,甚至可能是返回值之一。 -
@Sam true ,答案很快。