Java 在j2me中是否可以同时打开和编辑2个或更多记录存储?
我想知道在j2me中是否有可能同时打开2个或更多的记录存储。我基本上希望能够在相同的代码执行过程中从2个不同的记录存储区添加/删除记录。这可能吗 如果是,你会怎么做?在班上的第一名,你会做一些类似“私人录音机商店”的事情您需要两个这样的实例才能使其工作,还是可以用一个声明来实现 提前感谢。来自:“MIDlet套件中的MIDlet可以创建多个记录存储,只要它们的名称不同。当从平台中删除MIDlet套件时,与其MIDlet关联的所有记录存储也将被删除。MIDlet套件中的MIDlet可以直接访问彼此的记录存储。” 因此,您可以在一个MIDlet中操作多个记录存储 下面是一个我有时与我的学生一起使用的示例(警告:此MIDlet中没有UI:仅用于演示目的)。您可以看到,使用一个或两个变量并不重要Java 在j2me中是否可以同时打开和编辑2个或更多记录存储?,java,java-me,midp,rms,Java,Java Me,Midp,Rms,我想知道在j2me中是否有可能同时打开2个或更多的记录存储。我基本上希望能够在相同的代码执行过程中从2个不同的记录存储区添加/删除记录。这可能吗 如果是,你会怎么做?在班上的第一名,你会做一些类似“私人录音机商店”的事情您需要两个这样的实例才能使其工作,还是可以用一个声明来实现 提前感谢。来自:“MIDlet套件中的MIDlet可以创建多个记录存储,只要它们的名称不同。当从平台中删除MIDlet套件时,与其MIDlet关联的所有记录存储也将被删除。MIDlet套件中的MIDlet可以直接访问彼此
package test;
导入java.io.ByteArrayInputStream;
导入java.io.ByteArrayOutputStream;
导入java.io.DataInputStream;
导入java.io.DataOutputStream;
导入java.io.IOException;
导入javax.microedition.midlet.*;
导入javax.microedition.rms.RecordEnumeration;
导入javax.microedition.rms.RecordStore;
导入javax.microedition.rms.RecordStoreException
公共类ExampleTors扩展了MIDlet{
private final static String RS_BOYS_NAME = "boys";
private final static String RS_GIRLS_NAME = "girls";
public ExampleTwoRS() {
Person[] people = new Person[4];
people[0] = new Person("Angelina", false);
people[1] = new Person("Brad", true);
people[2] = new Person("Mirka", false);
people[3] = new Person("Roger", true);
try {
initData(people);
readData(RS_BOYS_NAME);
readData(RS_GIRLS_NAME);
} catch (RecordStoreException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void startApp() {
}
private void initData(Person[] people) throws RecordStoreException, IOException {
RecordStore rsBoys = null;
RecordStore rsGirls = null;
try {
rsBoys = RecordStore.openRecordStore(RS_BOYS_NAME, true);
rsGirls = RecordStore.openRecordStore(RS_GIRLS_NAME, true);
for (int i = 0; i < people.length; i++) {
byte[] data = people[i].toByteArray();
if (people[i].isMale()) {
rsBoys.addRecord(data, 0, data.length);
} else {
rsGirls.addRecord(data, 0, data.length);
}
}
} finally {
rsBoys.closeRecordStore();
rsGirls.closeRecordStore();
}
}
private void readData(String rsName) throws RecordStoreException, IOException {
RecordStore rs = null;
try {
rs = RecordStore.openRecordStore(rsName, true);
int i = 0;
RecordEnumeration re = rs.enumerateRecords(null, null, true);
Person[] people = new Person[re.numRecords()];
while (re.hasNextElement()) {
people[i] = new Person();
people[i].fromByteArray(re.nextRecord());
System.out.println(rsName + ": " + people[i].toString());
i++;
}
} finally {
rs.closeRecordStore();
}
}
private void initNumbers() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}如果您希望同时打开两个RecordStore实例,则不能同时对这两个实例使用同一个变量。我要补充的是,虽然规范允许单个MIDlet使用多个RecordStore,但这并不意味着它们可以同时打开。这是一个可以解释的碎片点,不需要解释实际目标手机上的ested。
public Person() {
}
public Person(String name, boolean male) {
this.name = name;
this.male = male;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
public void fromDataStream(DataInputStream dis) throws IOException {
this.name = dis.readUTF();
this.male = dis.readBoolean();
}
public void toDataStream(DataOutputStream dos) throws IOException {
dos.writeUTF(getName());
dos.writeBoolean(isMale());
}
public void fromByteArray(byte[] data) throws IOException {
ByteArrayInputStream bin = new ByteArrayInputStream(data);
DataInputStream din = new DataInputStream(bin);
fromDataStream(din);
din.close();
}
public byte[] toByteArray() throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(bout);
toDataStream(dout);
dout.close();
return bout.toByteArray();
}
public String toString() {
return name + (male ? " (b)" : " (g)");
}