Android

Android学习笔记(五)

Android权威编程指南第五章挑战练习解答。

挑战练习-堵住漏洞

用户作弊后,可以 旋转 CheatActivity来清除作弊痕迹。

主要思路是,重写一个onSaveInstanceState方法,然后在CheatActivity中调用savedInstanceState,savedInstanceState用于保存Activity被Destory前的数据。

新建一个键值对,用于存放是否查看过答案的信息

private static final String KEY_CHEAT = "cheat";
private boolean cheatFlag = false;

重写onSaveInstanceState方法,注意不能像下图这样写

image 100

因为下图中EXTRA_ANSWER_SHOWN的变量保存在data这个Intent对象中,直接在cheatActivity中取是无效的。

image 103

所以我们需要在setAnswerShownResult方法中将查看过答案的信息保存在savedInstanceState的KEY_CHEAT中,就像下图这样:

image 104

检测是否保存过数据,若保存过直接检测键值对所携带的信息,已经查看过答案,就可以直接调用setAnswerShownResult方法了。

image 105

注意不能直接写成已经保存过信息就调用此方法,因为用户可能没点击“查看答案”按钮。

image 97

这样点击“查看答案”后,在CheatActivity怎么转都会记录作弊的信息。

作弊返回后,用户可以旋转QuizActivity来清除mIsCheater变量值

有了上一个问题的经验,这个就很简单,思路是一样的,我们需要在Activity关闭前保存信息,并在启动时检测是否已经保存过信息。

在MainStudy.java中添加

 private static final String KEY_CHEAT = "cheat";

添加保存信息。

image 106

读取信息

image 107

这样在MainActivity怎么转,作弊的信息都会被记录了。

用户可以不断点击“下一个”按钮,转到曾经看过答案的问题,导致记录丢失

我们把mIsAnswer换成数组

image 108

在Activity被创建时,读取所有问题的作弊信息

image 109

保存的位置也要修改

image 110

这样无论怎么转,作弊信息都会被保留。

发表评论