Cita:
Iniciado por adrianuthh ola mi problema es el siguiente tengo una conexion a base de datos desde mi movil lo que ago es descargar datos (Preguntas con susrespecticas respuestas) para formar encuestas, una vez descargados los datos los guardo en un Record Store (RMS) asta aqui todo bien, ald escargar una solo encuesta no hay problema el problema es que al querer volver a descargar 2 o mas encuestas el Record Store no se abre correctamente quisiera saber porque me pasa eso
No seria mejor utilizar SQLite en el movil.
De todos modos pongo las clases que utilizo para acceder al RecordStore
Clase que se encarga de manejar el RecordStore Código PHP:
import java.io.IOException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
public class PreferencesModel {
private static RecordStore rs;
public static final String NAME = "ConfDB";
/**
*
*/
public static void open() {
try {
rs = RecordStore.openRecordStore(NAME, true);
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
/**
*
*/
public static void close() {
try {
rs.closeRecordStore();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
/**
*
*/
public static void save() {
try {
byte[] record = PreferencesEntry.serialize();
if (rs.getNumRecords() == 0) {
rs.addRecord(record, 0, record.length);
} else {
rs.setRecord(1, record, 0, record.length);
}
} catch (RecordStoreException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
*
*/
public static void load() {
try {
PreferencesEntry.deserialize(rs.getRecord(1));
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
}
Serialización de los datos Código PHP:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class PreferencesEntry {
public static byte[] serialize() throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(Preferences.runningGuiCount);
return baos.toByteArray();
}
public static void deserialize(byte[] data) throws IOException
{
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
Preferences.runningGuiCount=dis.readInt();
}
}
Variables que se almacenaran Código PHP:
public class Preferences {
//RecordStore
public static int runningGuiCount=0;
public static void load(){
PreferencesModel.open();
PreferencesModel.load();
PreferencesModel.close();
}
public static void save(){
PreferencesModel.open();
PreferencesModel.save();
PreferencesModel.close();
}
}
Con las clases que acabo de poner manejariamos correctamente nuestro RecordStore
Por ejemplo, si queremos que vaya contabilizando el numero de ejecuciones de la app, bastaría con poner al inicio el siguiente código :
Código PHP:
//carga los Datos almacenados en el recordstore
Preferences.load();
//Aumentamos en uno el valor de la varible
Preferences.runningGuiCount++;
//Guardamos de nuevo los datos al recordstore
Preferences.save();
Si solo queremos obtener el numero de ejecuciones con esto seria suficiente(Aquí no va el método "
Preferences.save();" , puesto que solo obtenemos valores mas no almacenamos
Código PHP:
//carga los Datos almacenados en el recordstore
Preferences.load();
int numeroEjecuciones=Preferences.runningGuiCount;