GuglielmoS Pubblicato: 3 Novembre 2009 Segnalazione Share Pubblicato: 3 Novembre 2009 Ciao a tutti e scusate se rompo ancora, ma non riesco proprio a capire per quale motivo ci sia questa eccezione, la quale mi indica che l'indice passatogli non è valido. 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) Link to comment Condividi su altri siti More sharing options...
Traal Pubblicato: 30 Ottobre 2010 Segnalazione Share Pubblicato: 30 Ottobre 2010 UP! Mi interessa anche a me =) Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 31 Ottobre 2010 Segnalazione Share Pubblicato: 31 Ottobre 2010 Prova così...... 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[35]; // può occupare piu dei 15 previsti 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 { int len; if (dataBase.getNumRecords() > 0) { try { dataBase.getRecord(1, buff1, 0); dataInizioRaccolta = new String(buff1); len=dataBase.getRecord(2, buff2, 0); nMonete2 = Integer.parseInt(new String(buff2,0,len)); len=dataBase.getRecord(3, buff3, 0); nMonete1 = Integer.parseInt(new String(buff3,0,len)); len=dataBase.getRecord(4, buff4, 0); nMonete50 = Integer.parseInt((new String(buff4,0,len))); 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 { if (dataBase.getNumRecords() > 0) { dataBase.setRecord(1, buff1, 0, buff1.length); dataBase.setRecord(2, buff2, 0, buff2.length); dataBase.setRecord(3, buff3, 0, buff3.length); dataBase.setRecord(4, buff4, 0, buff4.length); } else { dataBase.addRecord(buff1, 0, buff1.length); dataBase.addRecord(buff2, 0, buff2.length); dataBase.addRecord(buff3, 0, buff3.length); dataBase.addRecord(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(); } } } } Link to comment Condividi su altri siti More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Accedi Ora