您的位置:首页 > 其它

答题系统的缓存策略

2016-06-20 11:08 381 查看
答题并不是一次性的 。用户可以答题一半退出 ,下次进来继续答题,直到时间结束自动提交答题信息

当然高端玩家都是规定时间答完,点击按钮手动提交答题信息的

进行缓存方式

将信息放入
考试答题信息提交的bean
里面submitExamRequestData

同时 在这个bean 里面添加了一个考试时间的字段 。用来保存examTime
倒计时信息的,设置为String?格式,缓存时传入当前剩余时间,网络提交时传入则为null。

gson.toJson()方法将Bean 类型转换为json 字符串,外加试卷id来区分(是否同时加入uid 加以区分待续)。

答题信息提交

1.每次倒计时完成时自动提交答题信息

2.用户点击来完成考试按钮 会提交答题信息

3.若超时未提交,ondestory 方法中会进行缓存,下次进来 读取缓存信息 优先考虑 倒计时。当前剩余时间为0 。收集缓存信息并提交答案 ,随即finish 当前activity。

信息收集过程

由于之前答题触发 是点击adapter 中的某一项 ,listener回调信息将答案放入hashmap。在提交的时候根据当前hashmap 装入的参数提交答案

这个时候侧重考察点:用户重复进出答题场景应考虑到:答题中间退出,继续答题,又退出 ,继续答题,又退出...

1.提交时

var submitData: submitExamRequestData

submitData = submitExamRequestData(UserInfoUtil.getUserOid()!!,
mId!!.toInt(), optionList!!,
null)

cacheExamData?.optionList?.apply
{ //如果缓存有答案,提交的时候应该把它加到optionList中去,因为之前的保存的答题信息并不是回调回来的

cacheExamData?.optionList?.putAll(optionList!!)

submitData = submitExamRequestData(UserInfoUtil.getUserOid()!!,
mId!!.toInt(), cacheExamData!!.optionList,
null)

}

2.缓存时

if (optionList
!= null &&
mId != null
&& examCurrentTime !=
null) {

//执行缓存操作
答案缓存,根据试卷Id
标记区分

var submitData: submitExamRequestData

submitData = submitExamRequestData(UserInfoUtil.getUserOid()!!,
mId!!.toInt(), optionList!!,
examCurrentTime)

cacheExamData?.optionList?.apply
{ //如果之前缓存有答案,再次缓存的时候应该把它加到optionList中去

cacheExamData?.optionList?.putAll(optionList!!)

submitData = submitExamRequestData(UserInfoUtil.getUserOid()!!,
mId!!.toInt(), cacheExamData!!.optionList,
examCurrentTime)

}

cacheExamInfo?.setCacheData(submitData,
true)

}

用意为何?

提交要考虑用户重复进入答题场景。无论是否对当前试题做了处理,都应该将以前缓存的信息合入

缓存时也是同理,在以前缓存基础上的修改应合入信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: