《安卓权威编程指南》挑战练习5.5 堵住漏洞

三个漏洞

  1. 用户作弊后,可以旋转CheatActivity来清除作弊痕迹。
  2. 作弊返回后,用户可以旋转QuizActivity来清除mIsCheater变量值。
  3. 用户可以不断单击next按钮,跳到偷看过问题的答案,从而使作弊记录丢失。

解决方式

  1. 判断用户是否作弊的依据是是否点击Show Answer按钮,所以可以设置一个初值为false布尔变量,当用户点击按钮就将其设为true。将其保存到Bundel对象中,在onCreate()方法中取出,根据其值调用setAnswerShownResult()方法。
private static final String FIRST_BUG = "first_bug";
 protected void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putBoolean(FIRST_BUG,mIsPressAnswerButton);
    }
 protected void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putBoolean(FIRST_BUG,mIsPressAnswerButton);
    }

2.将mIsCheater保存到Bundle对象,在onCreate()重新取出即可

 private static final String ANSWER_IS_TRUE = "answer_is_true";
  savedInstanceState.putBooleanArray(ANSWER_IS_TRUE,mIsCheater);
mIsCheater = savedInstanceState.getBooleanArray(ANSWER_IS_TRUE);

3.在2的基础上,将mIsCheater变为boolean类型的数组即可。很简单就不放代码了

你可能感兴趣的:(学习笔记)