0

sharedpreferences を使用していくつかの変数を保存していますが、保存メソッドが null ポインター例外でアプリをクラッシュさせます。

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

updateLevelUp は、プレーヤーがレベルアップしたときに呼び出されるメソッドで、その画面を終了するとゲームが再開され、save() が呼び出されます。

4

2 に答える 2

1

あなたのcontext変数はnullです。onCreate()初期化されていること、およびそれぞれの の前にこのコードを呼び出していないことを確認してくださいContext

于 2013-02-18T20:34:18.190 に答える
0

良いルールとして、SharedPreferences.EditorSharedPreferences を管理するときは を利用することをお勧めします。

より簡単な方法は次のとおりです。

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 を取得する場合は、必ずログを投稿して、例外を追跡できるようにしてください。

于 2013-02-18T17:27:10.090 に答える