使用旋转Mainsetivity重置值

时间:2018-02-02 14:00:56

标签: java android

我启动了Android语言工作室,我只需要一步即可完成第一个TD。

以下是TD的说明:

在MainActivity中,创建一个布尔值数组 mQuestionTrichee,用变量mIndexActuel

进行浏览 好的,所以我这样做了:

private static final String A_TRICHE = "a triche";
private boolean[] mQuestionTrichee = new boolean[mTabQuestions.length];

之后,我在onSaveInstanceState()方法的Bundle中有了Question Cheat [mIndexActuel]的值:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Log.i(TAG, "onSaveInstanceState");
    outState.putInt(KEY_INDEX, mIndexActuel);
    outState.putBoolean(A_TRICHE, mQuestionTrichee[mIndexActuel]);
}

那么,我必须在onCreate()中获得它的价值:

   @Override
protected void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate appelee");
    setContentView(R.layout.activity_main);
    mQuestionTrichee[mIndexActuel]=savedInstanceState.getBoolean(A_TRICHE);

 }

但我稍后会遇到此错误:

  

java.lang.NullPointerException:尝试调用虚方法' boolean android.os.Bundle.getBoolean(java.lang.String)'在空对象引用上

我试图在方法onCreate()或onSaveInstanceState()中浏览我的表,但没有任何改变我仍然拥有它。

这是我添加的内容:

Application

   if(savedInstanceState != null)
    {
        for(mIndexActuel=0; mIndexActuel < mTabQuestions.length; mIndexActuel++)
        {
            if(mQuestionTrichee[mIndexActuel]==true)
            {
                mQuestionTrichee[mIndexActuel] = true;
            }
            else
            {
                mQuestionTrichee[mIndexActuel] = false;
            }
        }
        mIndexActuel = savedInstanceState.getInt(KEY_INDEX,0);
        mQuestionTrichee[mIndexActuel] = savedInstanceState.getBoolean(A_TRICHE);
    }

3 个答案:

答案 0 :(得分:2)

在你的方法中 public void onCreate(Bundle savedInstanceState) { ... }您需要进行空检查:

public void onCreate(Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        mQuestionTrichee[mIndexActuel] = savedInstanceState.getBoolean(A_TRICHE);
    }
}

如果先前未保存应用程序的状态,则bundle savedInstanceState将为null。

答案 1 :(得分:0)

onCreate()内,您尝试从savedInstanceState获取布尔值的部分,您在NullPointerException中获得了onCreate()有时返回的savedInstanceState的值为null。 您可以做的是在行if之前添加savedInstanceState.getBoolean(A_TRICHE)条件或覆盖onRestoreInstanceState(Bundle savedInstanceState)方法并将该行放在那里也是一种更好的做法。

答案 2 :(得分:-1)

你应该试试这个 -

if( savedInstanceState != null){
    mQuestionTrichee[mIndexActuel] = savedInstanceState.getBoolean(A_TRICHE);
}

您需要检查savedInstanceState是否只尝试获取值。