Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/06/2011, 15:15
JIUM
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Abrir correctamente un record despues de cerrar otro

Cita:
Iniciado por adrianuthh Ver Mensaje
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(NAMEtrue);
        } 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(record0record.length);

            } else {
                
rs.setRecord(1record0record.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[] datathrows 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