Blog of CodeJELLOW’S ENGINEERING NOTES
← 返回文章

Android学习笔记(五)

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

本文目录 ⌄

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

    挑战练习-堵住漏洞

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

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

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

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

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

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

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

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

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

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

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

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

    在MainStudy.java中添加

    TEXT
     private static final String KEY_CHEAT = "cheat";

    添加保存信息。

    读取信息

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

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

    我们把mIsAnswer换成数组

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

    保存的位置也要修改

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

    通过 RSS 订阅更新 →