programa expresso de capacitação módulo j2me aula 5 – record management system

20
Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Upload: internet

Post on 19-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Programa Expresso de CapacitaçãoMódulo J2ME

Aula 5 – Record Management System

Page 2: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Pausa para reflexão

"Sem esforço não há progresso, mas com esforço também não há progresso”

Ryotan Tokuda, Mestre Zen

Page 3: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Record Management System• Gereciamento de registros persistentes• Registro• Identificador ligado a um array de bytes

• Equivalente a armazenamento em arquivo de J2SE

• Classes para armazenar, recuperar, enumerar, comparar e filtrar dados não-voláteis

Page 4: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RMS• Armazém de registros (RecordStore)

• Nomenclatura• Até 32 caracteres UNICODE (16 bits)

ID de registro Dado1 Array de bytes

2 Array de bytes

... ..

Page 5: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RMS• Informações adicionais• Número da versão: um valor inteiro que é

incrementado a cada modificação do conteúdo do armazém

• Indicação de data/hora: última modificação do armazém

• A existência dos registros está limitada à do MIDlet que os criou

Page 6: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RMS - Métodos• static RecordStore openRecordStore(String nome, boolean criarSeNecessario);

• void closeRecordStore();

• void delete recordStore(String nome);

• int addRecord(byte[] dados, int offset, int numBytes);

• void setRecord(int recordId, byte[] novosDados, int offset, int numBytes);

• byte[] getRecord(int recordId);

• int getRecord(int recordId, byte[] buffer, int offset);

Page 7: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RMS – Métodos (Cont.)• int getNumRecords();

• long getLastModified();

• String getName();

• addRecordListener(RecordListener listener);

• removeRecordListener(RecordListener listener);

Page 8: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RMS - Exemplo...RecordStore rs = null; String nome = “Eduardo”;...try { rs = RecordStore.openRecordStore( “meusdados", true ); byte[] recData = nome.getBytes(); rs.addRecord(recData, 0, recData.length); //Grava dados ... //Recupera dados String retorno = new String( rs.getRecord(1) );

} catch( Exception e ) { // tratamento de exceção}

Page 9: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RecordEnumeration• Interface que fornece métodos de movimentação para

frente e para trás em registros• Semelhante ao Iterator em J2SE• Pode levar em conta filtros (para pesquisa) e/ou

comparadores (para ordenação)• Ex: classificar registros em ordem alfabética

Page 10: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RecordEnumeration• Métodos Principais

• RecordEnumerator enumerateRecords(RecordFilter filter, RecordComparator comparator, boolean keepUpdated); *

• byte nextRecord();• byte previousRecord();• Boolean hasNextElement();• Boolean hasPreviousElement();• Void keepUpdated(boolean keep);

* Método da classe RecordStore

Page 11: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Exemplo.....RecordEnumeration enum = re.enumerateRecords(null, null,

false);

while ( re.hasNextElement() ) {//armazena o próximo registro em um StringString str = new String(re.nextRecord());… processa algo…

}…

Page 12: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RecordComparator• Interface para comparação entre registros

• Método a ser implementado• Int compare(byte[] rec1, byte[] rec2);

• Tipos de RecordComparator• EQUIVALENT – rec1 é equivalente a rec2• FOLLOWS – rec1 vem depois de rec2 • PRECEDES – rec1 vem antes de rec2

Page 13: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Exemplo...public class Comparador implements RecordComparator {

public int compare(byte rec1, byte rec2) {String str1 = new String(rec1);String str2 = new String(rec2);

int resultado = str1.compareTo(str2);if (resultado == 0)

return RecordComparator.EQUIVALENT;else if (result < 0)

return RecordComparator.PRECEDES;else

return RecordComparator.FOLLOWS;}

}

Page 14: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Exemplo (Cont.)...//Cria um novo comparador para ordenarComparador comp = new Comparador();

//Referencia o comparador ao criar a enumeraçãoRecordEnumeration re = rs.enumerateRecords(null, comp, false);

//Itera nos registros, que já estarão ordenadosWhile ( re.hasPreviousElement ) {

... String s = new String(re.previousRecord());...

}…

Page 15: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RecordFilter• Interface para filtro de registros

• Apenas os resultados que correspondem ao critério do filtro, farão parte do conjunto enumerador

• Método a ser implementado• boolean matches(byte[] candidate)

Page 16: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Exemplo...class Filtro implements RecordFilter {

private String textoBuscado = null;

public Filtro(String textoBuscado) {//este é o texto a ser pesquisadothis.textoBuscado = textoBuscado.toLowerCase();

}

public boolean matches(byte[] candidato) {String str = new String(candidato).toLowerCase();//procura uma correspondênciaif ( textoBuscado != null && str.indexOf(textoBuscado) != -1 ) {

return true;} else {

return false;}

}}

Page 17: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Exemplo (Cont.)...//Cria um novo filtro de buscaFiltro filtro = new Filtro(“Texto a ser buscado”);

//Referencia o filtro ao criar o enumeradorRecordEnumeration re = rs.enumerateRecords(filtro, null, false);

/*Se houver pelo menos um registro no conjunto de resultados, uma correspondência foi encontrada*/

if (re.getNumRecords() > 0) {//Manipula os resultados

}…

Page 18: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

RecordListener• Notificação de que um registro foi adicionado,

removido ou atualizado• Ex: Salvar preferências de um usuário

• Opera como os outros Receptores de eventos já vistos em aula

• Métodos a serem implementados• void recordAdded(RecordStore rs, int recordId);• void recordChanged(RecordStore rs, int recordId);• void recordDeleted(RecordStore rs, int recordId);

Page 19: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Exercício

• Implemente a persistencia de uma agenda. Considere que cada elemento é composto de 3 Strings: Nome, Endereco e Telefone.

• Escreva filtros em cima da implementação acima.

Page 20: Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System

Referências

• Tutoriais da Sun