Java getBoolean()使我的应用程序崩溃(我想)

Java getBoolean()使我的应用程序崩溃(我想),java,android,bundle,oncreate,onsaveinstancestate,Java,Android,Bundle,Oncreate,Onsaveinstancestate,我的目标: 因此,我需要帮助将布尔原语放入一个捆绑包中,并在Android中出现屏幕方向更改时从捆绑包中检索它。我在一个条件语句中使用该布尔值,该语句有助于决定是否应启用2个按钮视图(MTRUEBUTON、mFalseButton)。到目前为止,当屏幕旋转时,我所做的是导致应用程序关闭(也称为崩溃)。我认为我没有正确地从包中检索或写入布尔值,这导致应用程序崩溃 应用程序的工作原理: 当用户触摸MTRUE按钮或mFalseButton按钮回答问题时,这两个按钮都将被禁用,因此不允许用户再次回答。我

我的目标: 因此,我需要帮助将布尔原语放入一个捆绑包中,并在Android中出现屏幕方向更改时从捆绑包中检索它。我在一个条件语句中使用该布尔值,该语句有助于决定是否应启用2个按钮视图(MTRUEBUTON、mFalseButton)。到目前为止,当屏幕旋转时,我所做的是导致应用程序关闭(也称为崩溃)。我认为我没有正确地从包中检索或写入布尔值,这导致应用程序崩溃

应用程序的工作原理: 当用户触摸MTRUE按钮或mFalseButton按钮回答问题时,这两个按钮都将被禁用,因此不允许用户再次回答。我希望在用户应答并旋转屏幕时,这些按钮保持禁用状态。**

我知道,当用户旋转他们的Android设备时,会调用onDestroy(),因为运行时配置发生了变化,导致应用程序在不知道其先前状态的情况下重新启动(除非将必要的数据存储到捆绑包中并将其传递到onCreate方法)

这些是我的活动类中的一些全局变量

private int index = 0;
priavate Button mTrueButton,mFalseButton;
private static final String KEY_INDEX = "index";
private static final String BTTN_ENABLED = "bttnEnabled";
private boolean trueFalseButtonsEnabled = true;
这是同一活动类的onCreate()方法中的一些语句

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate(Bundle) called");
    setContentView(R.layout.activity_quiz);

    if(savedInstanceState != null) {
        index = savedInstanceState.getInt(KEY_INDEX, 0);
        changeButtonEnableStatus(savedInstanceState.getBoolean(BTTN_ENABLED,true));
    }

    mTrueButton = (Button)findViewById(R.id.true_button);
    mFalseButton = (Button)findViewById(R.id.false_button);

    mTrueButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            checkAnswer(true);
            changeButtonEnableStatus(false);
        }
    });

    mFalseButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checkAnswer(false);
            changeButtonEnableStatus(false);
        }
    });
}
这些方法位于同一活动类中,但不在我的onCreate()中。

注意:
index=savedInstanceState.getInt(键索引,0)
工作正常。它将全局变量“index”设置为等于存储在keywork“KEY_index”中的int原语


但是我不这么认为:ChangeButtonneEnableStatus(savedInstanceState.getBoolean(BTTN_ENABLED,true));机器运转正常。当我包含该语句并运行应用程序,然后旋转设备时,我的应用程序似乎会崩溃。

发布
logcat
中显示的错误如果您使用Android Studio开发该应用程序,底部会有一个logcat书签。您可以打开它并搜索导致应用程序崩溃的错误。如果问题还不明显,您可以与我们分享错误(编辑您的问题以发布适当异常的堆栈跟踪),我认为我们将更容易找到问题所在。@RafaelC谢谢。你引导我解决了这个问题。我忘了我可以在日志中查看错误描述。这是一个nullpointerexception。ChangeButtonEnableStatus()试图在mFalseButton或mTrueButton有机会分配引用ID之前调用mTrueButton.setEnabled(bool)和mFalseButton.setEnabled(bool)。在第一次应用程序启动期间,没有问题,因为if(savedInstanceState!=null)条件为false。在onDestory()和重新启动之后,条件变为真。有意义:)很高兴我能帮忙
logcat
对于调试非常有用:)
private void changeButtonEnableStatus(boolean bool){
    trueFalseButtonsEnabled = bool;
    mTrueButton.setEnabled(bool);
    mFalseButton.setEnabled(bool);
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);
    Log.d(TAG,"onSavedInstanceState() called");
    savedInstanceState.putInt(KEY_INDEX,index);
    savedInstanceState.putBoolean(BTTN_ENABLED, trueFalseButtonsEnabled);
}