import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotOpenException;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class RMSMIDlet extends MIDlet implements CommandListener {
private Form mainForm;
private TextField tfSubject;
private TextField tfContent;
private Command showInfoCom;
private Command addRMSCom;
private Command clearCom;
private Command showRMSCom;
private Command deleteRMSCom;
private Command exitCom;
private RecordStore sodinoRMS;
private static String textArr[] = { "RMS Sys", "Subject", "Content",
"Input Sub", "Input Content", "SodinoRMS" };
public RMSMIDlet() {
// TODO Auto-generated constructor stub
tfSubject = new TextField(textArr[1], textArr[3], 20, TextField.ANY);
tfContent = new TextField(textArr[2], textArr[4], 100, TextField.ANY);
mainForm = new Form(textArr[0]);
mainForm.append(tfSubject);
mainForm.append(tfContent);
showInfoCom = new Command("ShowInfo", Command.SCREEN, 1);
addRMSCom = new Command("AddtoRMS", Command.SCREEN, 2);
showRMSCom = new Command("ShowRMS", Command.SCREEN, 3);
clearCom = new Command("ClearScreen", Command.SCREEN, 4);
deleteRMSCom = new Command("DeleteRMS", Command.SCREEN, 5);
exitCom = new Command("Exit", Command.EXIT, 0);
mainForm.addCommand(showInfoCom);
mainForm.addCommand(addRMSCom);
mainForm.addCommand(showRMSCom);
mainForm.addCommand(clearCom);
mainForm.addCommand(deleteRMSCom);
mainForm.addCommand(exitCom);
mainForm.setCommandListener(this);
// 清除之前的记录
try {
RecordStore.deleteRecordStore(textArr[5]);
} catch (RecordStoreNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("NOT Found");
} catch (RecordStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
Display d = Display.getDisplay(this);
d.setCurrent(mainForm);
}
public void commandAction(Command c, Displayable d) {
if (c.getCommandType() == Command.EXIT) {
try {
destroyApp(false);
} catch (MIDletStateChangeException msce) {
System.out.println(msce.toString());
}
notifyDestroyed();
} else if (c == showInfoCom) {
showInfo();
} else if (c == clearCom) {
clearScreen();
} else if (c == addRMSCom) {
openRMS();
String infoSubject = tfSubject.getString();
String infoContent = tfContent.getString();
String textAdded = infoSubject + ":" + infoContent;
addtoRMS(textAdded);
closeRMS();
} else if (c == showRMSCom) {
openRMS();
showRMS();
closeRMS();
} else if (c == deleteRMSCom) {
deleteRMS();
}
}
private void showInfo() {
String subText = tfSubject.getString();
String conText = tfContent.getString();
mainForm.append(textArr[1] + ":" + subText);
mainForm.append("\n");
mainForm.append(textArr[2] + ":" + conText);
System.out.println("Subject :" + subText + " \n" + "Content : "
+ conText);
}
private void showInfo(String infoStr) {
mainForm.append("\n" + infoStr);
}
private void clearScreen() {
int size = mainForm.size();
// 倒序删除,0、1为Subject和Content不删除
for (int i = size - 1; i > 1; i--) {
mainForm.delete(i);
}
tfSubject.setString(textArr[0]);
tfContent.setString(textArr[1]);
}
private void openRMS() {
String exceptionString = "";
try {
sodinoRMS = RecordStore.openRecordStore(textArr[5], true);
} catch (RecordStoreNotFoundException rsnfe) {
exceptionString += "RecordStoreNotFound";
} catch (RecordStoreFullException rsfe) {
exceptionString += "RecordStoreFull";
} catch (RecordStoreException rse) {
exceptionString += "RecordStoreException";
} finally {
if (exceptionString.equals("") == false) {
showException(exceptionString + " openRMS");
}
}
}
private void addtoRMS(String info) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeUTF(info);
dos.close();
baos.close();
} catch (IOException ioe) {
String exceptionStr = "IOException occured when dos.writeUTF or closed";
showException(exceptionStr + " addtoRMS");
}
byte[] data = baos.toByteArray();
String exceptionStr = "";
try {
int sequence = sodinoRMS.addRecord(data, 0, data.length);
System.out.println(sequence);
} catch (RecordStoreFullException rsfe) {
exceptionStr += " RecordStoreFullException";
} catch (RecordStoreNotFoundException rsnfe) {
exceptionStr += " RecordStoreNotFoundException";
} catch (RecordStoreException rse) {
exceptionStr += " RecordStoreException";
} finally {
if (exceptionStr.equals("") == false) {
showException(exceptionStr + " addtoRMS");
}
}
}
private String getRecord(byte[] array) {
String strTemp = null;
ByteArrayInputStream bais = new ByteArrayInputStream(array);
DataInputStream dis = new DataInputStream(bais);
try {
strTemp = dis.readUTF();
dis.close();
bais.close();
} catch (IOException e) {
showException("FirstIOException" + " getRecord");
}
return strTemp;
}
private void showRMS() {
String mainText = "";
String exceptionStr = "";
try {
RecordEnumeration re = sodinoRMS.enumerateRecords(null, null, true);
int recordSize = re.numRecords();
showInfo("Record Num: " + recordSize);
while (re.hasNextElement()) {
byte[] data = re.nextRecord();
mainText = getRecord(data);
showInfo(mainText);
}
} catch (RecordStoreNotOpenException rsnoe) {
exceptionStr += "RecordStoreNotOpen";
} catch (RecordStoreFullException rsfe) {
exceptionStr += " RecordStoreFull";
} catch (RecordStoreNotFoundException rsnfe) {
exceptionStr += " RecordStoreNotFound";
} catch (RecordStoreException rse) {
exceptionStr += " RecordStoreException";
} finally {
if (exceptionStr.equals("") == false) {
showException(exceptionStr + " showRMS");
}
}
}
private void closeRMS() {
String exceptionStr = "";
try {
sodinoRMS.closeRecordStore();
} catch (RecordStoreNotOpenException rsnoe) {
exceptionStr += "RecordStoreNotOpenException";
} catch (RecordStoreException e) {
exceptionStr += " RecordStoreNotOpenException";
} finally {
if (exceptionStr.equals("") == false) {
showException(exceptionStr + " closeRMS");
}
}
}
private void deleteRMS() {
String exceptionStr = "";
try {
RecordStore.deleteRecordStore(textArr[5]);
} catch (RecordStoreNotFoundException rsnfe) {
exceptionStr += "RecordStoreNotFoundException";
} catch (RecordStoreException rse) {
exceptionStr += "RecordStoreException";
} finally {
if (exceptionStr.equals("") == false) {
showException(exceptionStr + " deleteRMS");
} else {
showException("RMS deleted!");
}
}