在J2ME开发过程中,其中RMS很重要,可以存储手机本地的数据,我国现在的无线网络如GPRS、CDMA等还不稳定,而且覆盖面还不广泛,因而如果采用无线移动方式去开发移动应用系统,如交通、保险、烟草等行业的应用系统,在很多地方并不能在线进行数据交互,为了解决这一问题,采用C/S结构,而不采用B/S结构,在手机端开发客户端程序,通过网络传递数据,在信号不稳定的地方可将数据存储在本地,到信号好的地方再和服务端进行通信,完成数据的交互。 在这个过程中,RMS系统起着很重要的作用,用来存储数据(包括本地的数据及从服务端传来的数据),以下是一个RMS的简单例子,让大家可以理解RMS的应用。 这是一个简单的记事本程序,可以将朋友的名字进行记录,也可以查询某个人的名字,从中我们可以了解怎样对记录进行操作,如增加、查询、删除等。 MIDlet为notebook.java,RF.java是生成recordFilter记录过滤器的类,用来形成记录集,起到相当于recordSet的作用。 notebook.java: import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.rms.*;
public class notebook extends MIDlet implements CommandListener{ private Display display; private Form form; private Command cmdExit,cmdOk,cmdQuery; private TextField textfield; private RecordStore rs=null; static final String rsName="NOTEBOOK"; private byte[] data; int lastID; int recordID; RecordFilter rf;
public notebook(){ display=Display.getDisplay(this); form=new Form("记事本"); cmdExit=new Command("退出",Command.EXIT,1); cmdOk=new Command("确定",Command.SCREEN,1); cmdQuery=new Command("查询",Command.SCREEN,1); textfield=new TextField("请输入名字:","",20,0); form.addCommand(cmdExit); form.addCommand(cmdOk); form.addCommand(cmdQuery); form.append(textfield); form.setCommandListener(this);
try{ rs=RecordStore.openRecordStore(rsName,true); }catch(RecordStoreException e){ } }
public void startApp(){ display.setCurrent(form); }
public void pauseApp(){}
public void destroyApp(boolean u){} public void commandAction(Command c,Displayable d){ if(c==cmdExit){ try{ rs.closeRecordStore(); }catch(RecordStoreException e){ } destroyApp(true); notifyDestroyed(); } if(c==cmdOk){ data=(textfield.getString()).getBytes(); try{ recordID=rs.addRecord(data,0,data.length); System.out.println("recordID "+recordID+" is added!Total num is "+rs.getNumRecords()); }catch(RecordStoreException e){ System.out.println("Program error!exit"); } textfield.setString(""); } if(c==cmdQuery){ try{ int lastID=rs.getNextRecordID(); for(int i=1;i<lastID;i++){ try{ byte[] data1=rs.getRecord(i); if(data1==null){ System.out.println("null"); rs.deleteRecord(i); }else{ System.out.println(new String(data1)); } }catch(InvalidRecordIDException e){ continue;} } }catch(RecordStoreException e){} rf=new RF((textfield.getString()).getBytes()); try{ RecordEnumeration enum=rs.enumerateRecords(rf,null,false); System.out.println("查询结果如下:"); while(enum.hasNextElement()){ byte[] data2=enum.nextRecord(); if(data2==null){System.out.println("null");}else{ System.out.println(new String(data2));} } }catch(Exception e){ System.out.println("program error"+e.getMessage()); } }
} } RF.java: import javax.microedition.rms.*; public class RF implements RecordFilter{
byte[] data4; RF(byte[] data4){ this.data4=data4; }
public boolean matches(byte[] candidate){ String s1=new String(candidate); if(s1.equals(new String(data4))){ return true; }else{ return false; } } }
以上程序在WTK中运行通过,请大家参考,提出宝贵意见。
|
|