Adesso il codice non sarà ottimizzato e dovrò migliorarlo, però teoricamente dovrebbe riuscire a salvarmi e a leggermi dal RecordStore che gli ho definito(anche quando richiamo il metodo RecordStore.openRecordStore, il secondo parametro è a true per indicargli di creare il RS se non esiste).
Il problema si presenta quindi quando a clickare sul comando salva della midlet.
Codice della MIDlet:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Date;
public class MoneyMidlet extends MIDlet implements CommandListener {
// Componenti Grafici
private Display display;
private Form formPrincipale;
private Command cmdExit;
private Command cmdSave;
private StringItem strDataInizio;
private StringItem credits;
private TextField txtMoneteDa2;
private TextField txtMoneteDa1;
private TextField txtMoneteDa50;
// Componenti per i dati
private Money monete;
public MoneyMidlet() {
display = Display.getDisplay(this);
// Istanzio i vari oggetti del form
formPrincipale = new Form("MyMoney - Gestione Monete");
cmdExit = new Command("Esci", Command.EXIT, 1);
cmdSave = new Command("Salva", Command.OK, 2);
txtMoneteDa2 = new TextField("Monete Da 2:", null, 5, TextField.NUMERIC);
txtMoneteDa1 = new TextField("Monete Da 1:", null, 5, TextField.NUMERIC);
txtMoneteDa50 = new TextField("Monete Da 50:", null, 5, TextField.NUMERIC);
strDataInizio = new StringItem("Data Inizio Raccolta: ", "");
credits = new StringItem("Autore del Programma:", "GuglielmoS");
// Istanzio l'oggetto per la gestione dei dati
monete = new Money();
// Se è la prima volta che viene avviata la midlet setto tutto a 0
if (monete.isFirstTime()) {
strDataInizio.setText(new Date().toString());
txtMoneteDa2.setString("0");
txtMoneteDa1.setString("0");
txtMoneteDa50.setString("0");
} else {
loadFromRS();
}
}
public void loadFromRS() {
strDataInizio.setText(monete.getDataInizioRaccolta());
txtMoneteDa2.setString(Integer.toString(monete.getMoneteDa2()));
txtMoneteDa1.setString(Integer.toString(monete.getMoneteDa1()));
txtMoneteDa50.setString(Integer.toString(monete.getMoneteDa50()));
}
protected void startApp() throws MIDletStateChangeException {
// Aggiungo al form i vari componenti
formPrincipale.append(credits);
formPrincipale.append(strDataInizio);
formPrincipale.append(txtMoneteDa2);
formPrincipale.append(txtMoneteDa1);
formPrincipale.append(txtMoneteDa50);
formPrincipale.addCommand(cmdExit);
formPrincipale.addCommand(cmdSave);
formPrincipale.setCommandListener(this);
// Setto formPrincipale sul display
display.setCurrent(formPrincipale);
}
protected void pauseApp() {
notifyPaused();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}
public void commandAction(Command c, Displayable arg1) {
if (c == cmdExit) {
notifyDestroyed();
} else if (c == cmdSave) {
monete.setDataInizioRaccolta(strDataInizio.getText());
monete.setMoneteDa2(Integer.parseInt(txtMoneteDa2.getString()));
monete.setMoneteDa1(Integer.parseInt(txtMoneteDa1.getString()));
monete.setMoneteDa50(Integer.parseInt(txtMoneteDa50.getString()));
monete.saveToRS();
}
}
}Classe utilizzata nella MIDlet:
import javax.microedition.rms.*;
public class Money {
private RecordStore dataBase;
final static private String DBNAME = "mymoney_db";
private int nMonete2;
private int nMonete1;
private int nMonete50;
private String dataInizioRaccolta;
private boolean firstTime;
private byte[] buff1 = new byte[10];
private byte[] buff2 = new byte[5];
private byte[] buff3 = new byte[5];
private byte[] buff4 = new byte[5];
public Money() {
firstTime = true;
// Tento di aprire il record store
try {
dataBase = RecordStore.openRecordStore(DBNAME, true);
} catch (RecordStoreException rse) {
rse.printStackTrace();
}
// Leggo la quantità di monete e la data di inzio
try {
if (dataBase.getNumRecords() > 0) {
try {
dataBase.getRecord(0, buff1, 0);
dataInizioRaccolta = new String(buff1);
dataBase.getRecord(1, buff2, 0);
nMonete2 = Integer.parseInt(new String(buff2));
dataBase.getRecord(2, buff3, 0);
nMonete1 = Integer.parseInt(new String(buff3));
dataBase.getRecord(3, buff4, 0);
nMonete50 = Integer.parseInt((new String(buff4)));
dataBase.closeRecordStore();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
firstTime = false;
}
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
}
}
// Metodi GETTER
public int getMoneteDa2() { return nMonete2; }
public int getMoneteDa1() { return nMonete1; }
public int getMoneteDa50() { return nMonete50; }
public String getDataInizioRaccolta() { return dataInizioRaccolta; }
/**
* @return true se è la prima volta che viene avviata la midlet, false altrimenti
*/
public boolean isFirstTime() { return firstTime; }
// Metodi SETTER
public void setDataInizioRaccolta(String dataInizioRaccolta) {
this.dataInizioRaccolta = dataInizioRaccolta;
}
public void setMoneteDa2(int moneteDa2) { nMonete2 = moneteDa2; }
public void setMoneteDa1(int moneteDa1) { nMonete1 = moneteDa1; }
public void setMoneteDa50(int moneteDa50) { nMonete50 = moneteDa50; }
public void saveToRS() {
// Tento di aprire il record store
try {
dataBase = RecordStore.openRecordStore(DBNAME, true);
} catch (RecordStoreException rse) {
rse.printStackTrace();
}
if (dataBase != null) {
buff1 = dataInizioRaccolta.getBytes();
buff2 = (Integer.toString(nMonete2)).getBytes();
buff3 = (Integer.toString(nMonete1)).getBytes();
buff4 = (Integer.toString(nMonete50)).getBytes();
// Tento di scrivere nel record store
try {
dataBase.setRecord(0, buff1, 0, buff1.length);
dataBase.setRecord(1, buff2, 0, buff2.length);
dataBase.setRecord(2, buff3, 0, buff3.length);
dataBase.setRecord(3, buff4, 0, buff4.length);
dataBase.closeRecordStore();
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
}
}Eccezione:
javax.microedition.rms.InvalidRecordIDException at javax.microedition.rms.RecordStore.findRecord(+18) at javax.microedition.rms.RecordStore.setRecord(+56) at Money.saveToRS(+96) at MoneyMidlet.commandAction(+95) at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282) at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10) at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68) at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47) at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+186) at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)

Aiuto













Pubblicità