- 浏览: 197265 次
- 性别:
- 来自: 湖南
文章分类
最新评论
基础知识
持久化存储的必要性
J2ME中提供了记录管理系统:RMS,和数据库很类似
相关的包:javax.microedition.rms 最重要的类:RecordStore
注意:RMS是记录管理系统,类似数据库;RecordStore是记录集,类似表,表中有Record
RecordStore
常用打开记录集的方法
staticRecordStoreopenRecordStore(StringrecordStoreName,booleancreateIfNecessary)
参数1:记录集名称(区分大小写);参数2:如果不存在,是否创建
staticRecordStore openRecordStore(StringrecordStoreName,booleancreateIfNecessary,intauthmode,booleanwritable)
参数1:记录集名称;参数2:如果不存在,是否创建;参数3:创建方式(AUTHMODE_ANY/PRIVATE),表示是否可以被其他套件创建访问;参数4:其他
套件是否可以进行写操作
记录集占据的空间:int getSize()
得到记录集名称:StringgetName()
关闭记录集: closeRecordStore
列出当前的所有记录集:RecordStore.listRecordStores();
删除某个记录集:RecordStore.deleteRecordStore("name");
RecordStore记录操作
注意:每一个记录都有ID,第一个记录ID为1
添加记录: int addRecord(byte[] data,intoffset,int numBytes)
案例:将“张三”,”李四光”添加进RMS
得到当前记录条数:int getNumRecords()
根据ID获得记录: byte[]getRecord(int recordId)/int getRecord(int recordId, byte[] buffer,intoffset)
根据ID获得记录字节数:int getRecordSize(int recordId)
修改记录: voidsetRecord(int recordId, byte[]newData,intoffset,int numBytes)
删除记录:voiddeleteRecord(int recordId) :注意,删掉一条记录之后,虽然记录数量减少了,但是记录还是保存在原来的位置,以后添加,ID在
后面增加
将对象写入RMS
将对象转化为字节数组(序列化);
将字节数组转化为对象
高级知识
遍历记录集
不能根据记录数量来遍历,因为纪录被删除后,其他纪录并不会填充空缺,记录数量虽然减少,但是ID数量不变
方法1:enumerateRecords(RecordFilterfilter, RecordComparatorcomparator,booleankeepUpdated) ,参数1:过滤条件,参数2:比较规则,参数3:是
否和记录集保持更新
方法2:getNextRecordID:得到下一个将要添加的记录的ID,然后用for循环,并判断记录是否为空
记录监听
voidrecordAdded(RecordStore recordStore,int recordId) :记录添加时自动触发
voidrecordChanged(RecordStore recordStore,int recordId) :纪录修改时自动触发
voidrecordDeleted(RecordStore recordStore,int recordId) :记录删除时,自动触发
RecordStore addRecordListener(RecordListenerlistener) 负责绑定
数据过滤
RecordFilter接口
定义一个类,实现这个接口
重写match函数,根据情况返回true或者false
用枚举方法来遍历时,将类的对象传进去
数据排序
RecordComparator接口
定义一个类,实现这个接口
重写compare函数,根据情况返回:
RecordComparator.PRECEDES:记录1在记录2前面
RecordComparator.FOLLOWS:记录1在记录2后面
RecordComparator.EQUIVALENT:记录1=记录2
用枚举方法来遍历时,将类的对象传进去
问题
可以修改MF或者JAD文件中的MIDlet-Data-Size属性来改变RMS的最小存储字节数,首选JAD
文件路径在WTK上面在:用户名称\j2mewtk\2.5.2\appdb\temp.DefaultColorPhoneXX下面的db文件
一个记录集内的容量有限,约100K,如果数据太大,考虑用多个记录集
模拟电话本
界面出现,显示一个欢迎界面,右下角按钮:电话本;左下角按钮:退出
按电话本按钮,显示电话本界面,用List显示所有电话;界面上左下角:返回;右下角两个按钮:添加电话,删除电话。
按删除电话,删掉当前电话;按添加电话,进入添加电话界面,输入姓名和电话,确定,可以添加,添加完毕,进入电话本界面;该界面左下角的返回按钮供返回
持久化存储的必要性
J2ME中提供了记录管理系统:RMS,和数据库很类似
相关的包:javax.microedition.rms 最重要的类:RecordStore
注意:RMS是记录管理系统,类似数据库;RecordStore是记录集,类似表,表中有Record
RecordStore
常用打开记录集的方法
staticRecordStoreopenRecordStore(StringrecordStoreName,booleancreateIfNecessary)
参数1:记录集名称(区分大小写);参数2:如果不存在,是否创建
staticRecordStore openRecordStore(StringrecordStoreName,booleancreateIfNecessary,intauthmode,booleanwritable)
参数1:记录集名称;参数2:如果不存在,是否创建;参数3:创建方式(AUTHMODE_ANY/PRIVATE),表示是否可以被其他套件创建访问;参数4:其他
套件是否可以进行写操作
记录集占据的空间:int getSize()
得到记录集名称:StringgetName()
关闭记录集: closeRecordStore
列出当前的所有记录集:RecordStore.listRecordStores();
删除某个记录集:RecordStore.deleteRecordStore("name");
RecordStore记录操作
注意:每一个记录都有ID,第一个记录ID为1
添加记录: int addRecord(byte[] data,intoffset,int numBytes)
案例:将“张三”,”李四光”添加进RMS
得到当前记录条数:int getNumRecords()
根据ID获得记录: byte[]getRecord(int recordId)/int getRecord(int recordId, byte[] buffer,intoffset)
根据ID获得记录字节数:int getRecordSize(int recordId)
修改记录: voidsetRecord(int recordId, byte[]newData,intoffset,int numBytes)
删除记录:voiddeleteRecord(int recordId) :注意,删掉一条记录之后,虽然记录数量减少了,但是记录还是保存在原来的位置,以后添加,ID在
后面增加
将对象写入RMS
将对象转化为字节数组(序列化);
将字节数组转化为对象
高级知识
遍历记录集
不能根据记录数量来遍历,因为纪录被删除后,其他纪录并不会填充空缺,记录数量虽然减少,但是ID数量不变
方法1:enumerateRecords(RecordFilterfilter, RecordComparatorcomparator,booleankeepUpdated) ,参数1:过滤条件,参数2:比较规则,参数3:是
否和记录集保持更新
方法2:getNextRecordID:得到下一个将要添加的记录的ID,然后用for循环,并判断记录是否为空
记录监听
voidrecordAdded(RecordStore recordStore,int recordId) :记录添加时自动触发
voidrecordChanged(RecordStore recordStore,int recordId) :纪录修改时自动触发
voidrecordDeleted(RecordStore recordStore,int recordId) :记录删除时,自动触发
RecordStore addRecordListener(RecordListenerlistener) 负责绑定
数据过滤
RecordFilter接口
定义一个类,实现这个接口
重写match函数,根据情况返回true或者false
用枚举方法来遍历时,将类的对象传进去
数据排序
RecordComparator接口
定义一个类,实现这个接口
重写compare函数,根据情况返回:
RecordComparator.PRECEDES:记录1在记录2前面
RecordComparator.FOLLOWS:记录1在记录2后面
RecordComparator.EQUIVALENT:记录1=记录2
用枚举方法来遍历时,将类的对象传进去
问题
可以修改MF或者JAD文件中的MIDlet-Data-Size属性来改变RMS的最小存储字节数,首选JAD
文件路径在WTK上面在:用户名称\j2mewtk\2.5.2\appdb\temp.DefaultColorPhoneXX下面的db文件
一个记录集内的容量有限,约100K,如果数据太大,考虑用多个记录集
模拟电话本
界面出现,显示一个欢迎界面,右下角按钮:电话本;左下角按钮:退出
按电话本按钮,显示电话本界面,用List显示所有电话;界面上左下角:返回;右下角两个按钮:添加电话,删除电话。
按删除电话,删掉当前电话;按添加电话,进入添加电话界面,输入姓名和电话,确定,可以添加,添加完毕,进入电话本界面;该界面左下角的返回按钮供返回
package prj; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; //欢迎界面 public class WelcomeCanvas extends Canvas implements CommandListener{ private Command cmdPhone = new Command("电话本",Command.SCREEN,1); private Command cmdExit = new Command("退出",Command.EXIT,1); private PhoneMIDlet pm; public WelcomeCanvas(PhoneMIDlet pm){ this.pm = pm; this.addCommand(cmdPhone); this.addCommand(cmdExit); this.setCommandListener(this); } public void commandAction(Command c,Displayable d){ if(c==cmdPhone){ pm.changeInterface("PhoneList"); } else if(c==cmdExit){ pm.notifyDestroyed(); } } public void paint(Graphics g){ String str = "欢迎光临"; g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE)); g.setColor(255,0,0); g.drawString(str, this.getWidth()/2, 50, Graphics.TOP|Graphics.HCENTER); } }
package prj; import java.util.Vector; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore; public class RMSOpe { private String storeName; private RecordStore rs; public RMSOpe(String storeName){ this.storeName = storeName; } public void openRecordStore(){//打开记录集 try{ rs = RecordStore.openRecordStore(storeName, true); }catch(Exception ex){ ex.printStackTrace(); } } public void addPhone(String name,String phone){//添加电话 String info = name + ":" + phone; byte[] b = info.getBytes(); try{ rs.addRecord(b, 0, b.length); }catch(Exception ex){ ex.printStackTrace(); } } public void deletePhone(String str){//删除电话 int lastId = 0; try{ lastId = rs.getNextRecordID(); }catch(Exception ex){ ex.printStackTrace(); } for(int i=1;i<lastId;i++){ try{ byte[] b = rs.getRecord(i); String recordStr = new String(b); if(recordStr.equals(str)){ rs.deleteRecord(i); } }catch(Exception ex){} } } public Vector getAllPhone(){//得到所有电话 Vector v = new Vector(); try{ RecordEnumeration re = rs.enumerateRecords(null,null,false); while(re.hasNextElement()){ v.addElement(new String(re.nextRecord())); } }catch(Exception ex){ ex.printStackTrace(); } return v; } public void closeRecordStore(){//关闭记录集 try{ rs.closeRecordStore(); }catch(Exception ex){} } }
package prj; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; public class AddForm extends Form implements CommandListener{ private Command cmdOK = new Command("确定添加",Command.SCREEN,1); private Command cmdBack = new Command("返回",Command.BACK,1); private TextField tfName = new TextField("请您输入姓名","",10,TextField.ANY); private TextField tfPhone = new TextField("请您输入电话","",10,TextField.PHONENUMBER); private PhoneMIDlet pm; public AddForm(PhoneMIDlet pm){ super("添加电话"); this.pm = pm; this.addCommand(cmdOK); this.addCommand(cmdBack); this.setCommandListener(this); this.append(tfName); this.append(tfPhone); } public void commandAction(Command c,Displayable d){ if(c==cmdOK){//添加电话,并回到电话本界面 //.....添加电话 this.addPhone(); pm.changeInterface("PhoneList"); } else if(c==cmdBack){//返回电话本界面 pm.changeInterface("PhoneList"); } } /*添加电话*/ public void addPhone(){ RMSOpe rmsope = new RMSOpe("PhoneStore"); rmsope.openRecordStore(); rmsope.addPhone(tfName.getString(), tfPhone.getString()); rmsope.closeRecordStore(); } }
package prj; import java.util.Vector; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.List; public class PhoneList extends List implements CommandListener{ private Command cmdBack = new Command("返回",Command.BACK,1); private Command cmdAdd = new Command("添加电话",Command.SCREEN,1); private Command cmdDel = new Command("删除电话",Command.SCREEN,1); private PhoneMIDlet pm; public PhoneList(PhoneMIDlet pm){ super("电话本",List.IMPLICIT); this.pm = pm; this.addCommand(cmdBack); this.addCommand(cmdAdd); this.addCommand(cmdDel); this.setCommandListener(this); } public void commandAction(Command c,Displayable d){ if(c==cmdBack){//返回欢迎界面 pm.changeInterface("WelcomeCanvas"); } else if(c==cmdAdd){ pm.changeInterface("AddForm"); } else if(c==cmdDel){ //删除纪录... this.delete(); pm.changeInterface("PhoneList");//更新 } } /*载入所有电话*/ public void loadPhones(){ RMSOpe rmsope = new RMSOpe("PhoneStore"); rmsope.openRecordStore(); Vector v = rmsope.getAllPhone(); for(int i=0;i<v.size();i++){ this.append((String)v.elementAt(i), null); } rmsope.closeRecordStore(); } /*删除电话*/ public void delete(){ RMSOpe rmsope = new RMSOpe("PhoneStore"); rmsope.openRecordStore(); rmsope.deletePhone(this.getString(this.getSelectedIndex())); rmsope.closeRecordStore(); } }
package prj; import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class PhoneMIDlet extends MIDlet { public Display dis; private WelcomeCanvas wc = new WelcomeCanvas(this); private PhoneList pl = new PhoneList(this); private AddForm af = new AddForm(this); protected void startApp() throws MIDletStateChangeException { dis = Display.getDisplay(this); this.changeInterface("WelcomeCanvas"); } public void changeInterface(String interfaceName){ if(interfaceName.equals("WelcomeCanvas")){ dis.setCurrent(wc); } else if(interfaceName.equals("PhoneList")){ dis.setCurrent(pl); pl.deleteAll(); pl.loadPhones();//更新 } else if(interfaceName.equals("AddForm")){ dis.setCurrent(af); } } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } }
- J2me源代码.rar (788.8 KB)
- 下载次数: 1
发表评论
-
J2ME代码优化
2011-01-17 10:09 879为什么要优化 CPU不快:10-400MHz 内存有限 ... -
GameAPI
2011-01-17 10:06 1639游戏画布,图层和游戏精灵 简介 javax.microed ... -
网络编程
2011-01-15 08:11 9391、Socket编程 Socket是什么 Socket是套接字 ... -
画布开发
2011-01-12 13:48 1178CanvasCanvas绘图 画布属于低级界面 Canva ... -
高级开发
2011-01-07 14:08 827高级开发 异常处理 异常的出现 程序运行时由于一些不可预知的 ... -
高级界面开发
2011-01-06 08:33 984高级界面开发 1:基本界 ... -
体系介绍和环境配置
2010-12-20 14:16 767J2ME简介 Three Java Platforms ...
相关推荐
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
使用opencv决策树训练mushroom数据集-python源码.zip
基于Faster RCNN的人脸检测识别系统python源码+项目说明+wider_face数据集.zip ### 三,使用说明 1. 锚框的大小为[128、256、512],比率为[1:1、1:2、2:1]。 2. tensorflow的版本是'1.9.0',keras的版本是'2.1.5',除了使用tensorflow2.0之后版本,其他版本都可以尝试。不支持python2.x。 3. 使用的是tensorflow backend,theano可以自行修改。 4. wider face的Label文件格式与VOC2012的label不同,而我使用的Faster RCNN需要VOC2012的格式,所以需要将label文件转换一下格式。具体可以查看 [https://blog.csdn.net/qq_37431083/article/details/102742322](https://blog.csdn.net/qq_37431083/article/details/102742322) 5. 在训练过程中可能会出现`"ValueError: 'a' cannot be empty
1985-2022年广东省企业专利明细数据-专利名称专利类型专利摘要专利授权专利 分类号等 1、数据说明: 在知识经济时代,技术创新是实现经济内生增长的关键动力, 科技优势成为经济竞争优势的根本源泉。新一轮科技革命和产业变革加速,全球创新速度加 快,我国正在经历发展方式转变、经济结构优化、新旧动能转换的攻关期,创新日益成为破 解发展难题的关键。专利作为技术与知识的载体,其申请数量是创新研究中衡量创新最常用 的指标之一,中国成为创新领先国家也同样体现在专利申请量上。改革开放 40 年来, 我们的知识产权事业取得了举世瞩目的巨大成功,但也面临着“大而不强”的问题。引导专 利从追求数量向提高质量转变,这是国家近几年的政策扶持重点,也是未来专利申请审查的 一个风向标,针对海量专利数据的价值识别与预测,逐渐成为当前的研究热点。 本数据提 供了1985-2022年广东省的企业专利明细数据,可用于各类专利相关研究。 2、 数据来源: 数据来源为国家知识产权局,利用知识产权局的高级检索,选择地区、年份、 专利类型,对全国31省的各类专利进行统计并将检索结果整理为面板数据,包括发明公开 、发明授权、实用
Kaggle竞赛 稻田病害分类-python源码.zip
文件目录解释 # 1. Models 用来存放的模型,可以是已有的Paddle格式的模型 # 2. Pages - assets 用到的图片资源 - assets.qrc 使用PySide生成的样式文件 - assets_rc.py GUI界面的样式文件,此目录和根目录都有,我忘记是调用的哪一个了,所以都保留了。 # 3. Utils - AttResNet.py 网络代码 - DatasetProcess.py 数据集处理代码 - FaceDetection.py 人脸检测代码 - Predict.py 模型预测代码 - VisualTrain.py 模型训练代码 - CSV文件 用来保存数据集和创建的信息 # 4. Dataset 存放数据集的目录 注意事项 * # 配置好环境,安装使用PySide的工具,不会安装见如下以PyCharm为例的说明 1. 依次点击 File:arrow_right:Settings:arrow_right:Tools:arrow_right:External Tools:arrow_right::heavy_plus_sign:添加PySide工具,
机械设计小线圈生产打蜡机sw20非常好的设计图纸100%好用.zip
触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板
基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图) 基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图)
机械设计大倾角输送机sw17非常好的设计图纸100%好用.zip
每个压缩包都附有数据表和数据来源 信心指数 1.投资者信心指数表 数据区间:20 08.04-2022.09,月度数据(数据库中该项数据的全部内容) 字段设置:全 选 全部字段: DeclareDate [发布日期] - YYYY-MM-DD SgnMonth [统计月度] - YYYY-MM IndexCode [指数编 码] - Q4001信心指数;Q4002国内经济基本面;Q4003国内经济政策; Q4004国际经济金融环境;Q4005股票估值;Q4006大盘乐观;Q4007大 盘反弹;Q4008大盘抗跌;Q4009买入; Name [指数名称] - 信心指 数;国内经济基本面;国内经济政策;国际经济金融环境;股票估值;大盘乐观;大盘反弹 ;大盘抗跌;买入; Value [当月值] - LastValue [上月值] - Mom [环比增减] - 压缩包所含文件: 数据样例: 2.消费者信心指数表 数据区间:1999.01-2022.09,月度数据(数据库中该项数据的全部内容 ) 字段设置:全选 全部字段: SgnMonth [统计月度] - YYYY-M M Expect
使用Keras+TensorFlow进行目标检测-python源码.zip
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板
触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板
触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板
lda代码-checkpoint-checkpoint.ipynb
变量如下: Ctnb[城市编号]-城市编号 Prvn[所属省份]-城市所属的省份 Pftn[所属地级市]-城市所属的地级市 Ctn[城市名称]-城市名称 Dat e[日期]-天气数据发布的时间 Dywek[星期时间]-星期时间 Htmpt[最 高气温]-当天天气最高气温,单位:℃ Ltmpt[最低气温]-当天天气最低气温, 单位:℃ Wthcdt[天气情况]-当天天气的具体状况 Wnddrt[风向]-当 天天气风吹来的方向 Wndfrc[风力]-当天天气风力级别 数据展示:
触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板