SavedIntanceState.getBoolean()让我的应用程序崩溃(我认为)

时间:2018-05-05 21:01:41

标签: java android bundle oncreate onsaveinstancestate

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

应用程序的运作方式: 当用户触摸mTrueButton或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()

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

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

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

0 个答案:

没有答案