Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个setter方法不起作用?_Java_Android_Getter Setter - Fatal编程技术网

Java 为什么这个setter方法不起作用?

Java 为什么这个setter方法不起作用?,java,android,getter-setter,Java,Android,Getter Setter,我试图获取一个变量,然后用setter方法设置另一个变量 以下是我所说的代码: if(savedInstanceState != null) { mCurrentIndex = savedInstanceState.getInt(KEY_INDEX); mIsCheater = savedInstanceState.getBoolean(KEY_CHEAT); mQuestionBank[mCurrentIndex].setHasCheated(mIsCheater);

我试图获取一个变量,然后用setter方法设置另一个变量

以下是我所说的代码:

if(savedInstanceState != null) {
    mCurrentIndex = savedInstanceState.getInt(KEY_INDEX);
    mIsCheater = savedInstanceState.getBoolean(KEY_CHEAT);
    mQuestionBank[mCurrentIndex].setHasCheated(mIsCheater);
}
在这里,我得到了一个mIsCheater,并使用它来设置另一个变量

但是,当我运行我的应用程序时,getter方法返回false,而mIsCheater返回true

这是代码:

Log.i(TAG,"mIsCheater = " + mIsCheater);
Log.i(TAG,"hasCheated = "+ mQuestionBank[mCurrentIndex].getHasCheated());

if(mQuestionBank[mCurrentIndex].getHasCheated()) {
    messageResId = R.string.judgment_toast;
} else {
    if (userPressedTrue == answerIsTrue) {
        messageResId = R.string.correct_toast;
    } else {
        messageResId = R.string.incorrect_toast;
    }
}
以下是记录器信息:

11088-11088/geoquiz.android.tubbs.com.geoquiz I/QuizActivity﹕ **mIsCheater = true**
11088-11088/geoquiz.android.tubbs.com.geoquiz I/QuizActivity﹕ **hasCheated = false**  
我不理解这一点,因为我清楚地正确地调用了setter/getter方法。它们也是相同的当前索引等等。 我让它工作了一秒钟,但后来我改变了一些东西,现在它不工作了

以下是附加代码:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    Log.i(TAG,"onSaveInstanceState()");
    savedInstanceState.putInt(KEY_INDEX,mCurrentIndex);
    savedInstanceState.putBoolean(KEY_CHEAT,mIsCheater);
}

我已经解决了我自己的问题

如果您注意到了,我正在onCreate方法中为mCurrentIndex执行赋值

onCreate只调用一次,因此从未调用我的setter方法,因为savedInstanceState为null。只有当我旋转设备并因此调用onCreate时,才会调用setter方法。 然而,当我从CheatActivity返回时,onResume被调用,我只是将setter方法放在其中

我更新的代码去掉了hasCheated变量,并在整个代码中调用了getter方法


谢谢你们的帮助

您的onSaveInstanceState(捆绑包b)的代码是什么样子的?您确定正确获取/设置了它吗?请尝试在if条件内和登录旁边打印索引。我已添加了onSaveInstance的代码,并尝试在索引上运行日志。他们完全一样。我几乎可以肯定我的设置/设置正确。你确定你读取的数组字段正确吗??