Java 加载SharedReferences时Android应用程序崩溃';getBoolean';

Java 加载SharedReferences时Android应用程序崩溃';getBoolean';,java,android,Java,Android,我想保存游戏中的设置(音乐、声音和振动),但在加载应用程序时启动时崩溃。 代码是: private SharedPreferences preferences; private SharedPreferences.Editor editor; private boolean bgMusicToggleState, soundToggleState, vibratorToggleState; ... @Override protected void onCreate(Bundle savedIn

我想保存游戏中的设置(音乐、声音和振动),但在加载应用程序时启动时崩溃。 代码是:

private SharedPreferences preferences;
private SharedPreferences.Editor editor;
private boolean bgMusicToggleState, soundToggleState, vibratorToggleState;
...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    dialog.getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

    dialog.setContentView(R.layout.pause_dialog);
    dialog.hide();
    initDialog();

    this.preferences = this.getSharedPreferences(GAME_NAME, MODE_PRIVATE);
    this.editor = preferences.edit();
    ...

}
...
public void saveMusicSettings(){
    editor.putBoolean("bgMusicToggleState", bgmusic_toggle.isChecked());
    editor.commit();
}
public void saveVibratorSettings(){
    editor.putBoolean("vibratorToggleState", vibrateToggle.isChecked());
    editor.commit();
}

public void saveSoundSettings(){
    editor.putBoolean("soundToggleState", sounds_toggle.isChecked());
    editor.commit();
}
...
private void initDialog(){
/// The App crashes here
    bgMusicToggleState = preferences.getBoolean("bgMusicToggleState", false);


    continue_Button = (Button) dialog.findViewById(R.id.continue_button);
    restart_Button = (Button) dialog.findViewById(R.id.restart_button);
    exit_Button = (Button) dialog.findViewById(R.id.exit_button);

    continue_Button.setOnClickListener(pauseClick);
    exit_Button.setOnClickListener(pauseClick);
    restart_Button.setOnClickListener(pauseClick);

    bgmusic_toggle = (ToggleButton) dialog.findViewById(R.id.backgroundsound_toggle);
    bgmusic_toggle.setChecked(bgMusicToggleState);
    bgmusic_toggle.setOnClickListener(toggleClickListener);

    sounds_toggle = (ToggleButton) dialog.findViewById(R.id.soundtoggle);
    sounds_toggle.setChecked(soundToggleState);
    sounds_toggle.setOnClickListener(toggleClickListener);

    vibrateToggle = (ToggleButton)dialog.findViewById(R.id.vibrate_toggle);
    vibrateToggle.setChecked(vibratorToggleState);
    vibrateToggle.setOnClickListener(toggleClickListener);


}
-->保存设置在toggleClickListener中调用 如果preferenes和编辑器在initMethod中,则没有区别。。。 可能是切换按钮在对话框中,还是我必须用一种方法来实现? 我希望你能帮助我。
谢谢

您必须在初始化
SharedReference
对象之后而不是之前调用
initDialog
。 改变


请发布崩溃日志
initDialog();
this.preferences = this.getSharedPreferences(GAME_NAME, MODE_PRIVATE);
this.editor = preferences.edit();
this.preferences = this.getSharedPreferences(GAME_NAME, MODE_PRIVATE);
this.editor = preferences.edit();
initDialog();