答题系统的缓存策略
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)
}
用意为何?
提交要考虑用户重复进入答题场景。无论是否对当前试题做了处理,都应该将以前缓存的信息合入
缓存时也是同理,在以前缓存基础上的修改应合入信息。
当然高端玩家都是规定时间答完,点击按钮手动提交答题信息的
进行缓存方式
将信息放入
考试答题信息提交的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)
}
用意为何?
提交要考虑用户重复进入答题场景。无论是否对当前试题做了处理,都应该将以前缓存的信息合入
缓存时也是同理,在以前缓存基础上的修改应合入信息。
相关文章推荐
- dos下 和 批处理中的 for 语句的基本用法
- Fastdfs与Nginx的整合
- Fastdfs与Nginx的整合
- tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.ma...
- Android NFC分析
- 流水线设计
- oracle 打开文件句柄数、连接数等参数查询
- Selenium Webdriver 学习总结-Jenkins配置(八)
- setting up your robot with tf(2)
- java并发之原子性与可见性(一)
- 关于互联网架构设计的心得与体会
- JavaScript操作表单实例讲解(上)
- 详解 QT Event 以及 Event Filter 事件处理
- C++的四种强制类型转换
- 如何选择大数据的编程语言
- Unix 安装MySQL
- 临界销售计算
- selenium webdriver 杂记-生成随机数字字母组合参数
- C++this指针
- HashMap的数据结构