Можно ли одновременно открывать и редактировать 2 или более RecordStores в j2me? - PullRequest
1 голос
/ 31 марта 2010

Мне было интересно, возможно ли в j2me одновременно открыть 2 или более хранилища записей. Я в основном хочу иметь возможность добавлять / удалять записи из 2 различных хранилищ записей в одном и том же исполнении кода. Возможно ли это?

Если так, как бы вы это сделали? В верхней части класса вы делаете что-то вроде «private RecordStore rs;» вам нужно иметь два экземпляра этого, чтобы заставить его работать, или вы могли бы сделать это с одной декларацией?

Заранее спасибо.

1 Ответ

3 голосов
/ 31 марта 2010

Из RecordStore javadoc : «Мидлетам в наборе мидлетов разрешено создавать несколько хранилищ записей, если каждому из них присвоены разные имена. При удалении набора мидлетов из платформы все записи хранилища, связанные с его MID-летами, также будут удалены. Мидлеты в наборе MID-летов могут напрямую обращаться к хранилищам записей друг друга. "

Таким образом, вы можете управлять несколькими хранилищами записей в мидлете.

Вот пример, который я иногда использую со своими учениками (ВНИМАНИЕ: в этом мидлете нет пользовательского интерфейса: только для демонстрационных целей). Вы можете видеть, что использование одной или двух переменных не имеет значения.

package test;

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; импорт java.io.IOException; импорт javax.microedition.midlet. *; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException;

открытый класс ExampleTwoRS расширяет 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) {
}

}

класс Person { личное строковое имя; логический мужчина;

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)");
}

}

...