我启动了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()中浏览我的表,但没有任何改变我仍然拥有它。
这是我添加的内容:
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);
}
答案 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是否只尝试获取值。