当前位置: 首页 > news >正文

保护自己的MIDlet程序之二:TimeProtector

作者:黑洞 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=885

第一部分介绍了Protector,并实现了一个最简单的Protector:OnceProtector
第二部分将实现一个TimeProtector
我们先来设想他所具有的功能:
1。没有到指定时间,他是处于激活状态的(check函数返回true);
2。过了指定时间,他就不能激活;
3。一旦过期,即使用户调整了时间也不再激活。

嗯,明确了目的,下面就来继续。
涉及到了时间问题,就来说说如何处理时间。midp有Date类型,但是提供的功能非常有限。
构造函数无法接受人们熟悉的字符串来初始化。
我们必须使用Calendar来做这些工作,当然,如果long在你眼里看来就是time(黑客帝国?)。。。
我是这样处理的,看TimeProtector的构造函数:

public TimeProtector(MIDlet app,int year,int month,int date)
{
super(app);
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR,year);
c.set(Calendar.MONTH,month-1);
c.set(Calendar.DATE,date);
date_=c.getTime();
}

这里要注意一个问题,就是month-1的问题,set month 9就是10月的意思。

TimeProtector有一个字段date_,可以用date_.getTime()直接和System.currentTimeMillis()比较大小。

那么我们如何实现第三个设想呢?如何做到即使用户修改时间也无法继续使用呢?
不妨再用用RMS来做个标记,表明已经过期:)
下面就是那个决定命运的check函数:

public boolean check()
{
boolean r=true;
try
{
RecordStore rs=RecordStore.openRecordStore(NameRMS,true);
RecordEnumeration e=rs.enumerateRecords(null,null,false);
if(e.hasNextElement())
{
r=false;
}
else
{
if(date_.getTime()<System.currentTimeMillis())
{
writeTag(rs);
r=false;
}
else
{
r=true;
}
}
rs.closeRecordStore();
}
catch(Exception ex)
{
r=false;
}
if(!r)
showUI();

return r;
}

好了,这就是我的TimeProtector的实现,你是怎么实现的呢?

TimeProtector的使用:
在startApp的开头加入if(!new TimeProtector(this,2005,10,19).check())return;

就是这么简单。准备好,下一篇就来实现SNProtector:)
有意见或建议请联系vmlinuxx@gmail.com,共同学习,共同提高:)

相关文章:

  • 深入学习之动画
  • 保护自己的MIDlet程序之三:SNProtector
  • 深入学习之前端递归应用
  • 深入学习之浅拷贝
  • 保护自己的MIDlet程序
  • 深入学习之非关系数据库
  • 深入学习之http
  • 实战程序管理器和多语言程序
  • 深入学习之闭包和bind 原型重写
  • 浏览器的渲染过程
  • J2ME-定时器(TimerTask)使用及初探
  • 深入学习之改变this的方法
  • 使用J2MEUnit测试J2ME程序
  • 深入学习之图片预加载 和 闭包新认知
  • NetBeans 4.0创建J2ME手机RSS阅读器
  • 2017-08-04 前端日报
  • Flannel解读
  • gf框架之分页模块(五) - 自定义分页
  • JavaScript 基本功--面试宝典
  • Java程序员幽默爆笑锦集
  • JAVA之继承和多态
  • React中的“虫洞”——Context
  • Sass Day-01
  • Web标准制定过程
  • 给github项目添加CI badge
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 删除表内多余的重复数据
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 学习JavaScript数据结构与算法 — 树
  • 用简单代码看卷积组块发展
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​configparser --- 配置文件解析器​
  • ​业务双活的数据切换思路设计(下)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)linux使用docker容器运行mysql
  • (汇总)os模块以及shutil模块对文件的操作
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (南京观海微电子)——COF介绍
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)Controller接口控制器详解(三)
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 材料检测系统崩溃分析
  • .net反混淆脱壳工具de4dot的使用
  • .net中我喜欢的两种验证码
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @Data注解的作用
  • @RequestBody与@ModelAttribute
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @staticmethod和@classmethod的作用与区别
  • @SuppressWarnings注解