Aplicação J2ME para Iniciantes
Iremos aqui, trabalhar com uma aplicação j2ME que trabalha com Http Connection e Com RMS para entrada e armazenamento de dados. Valos lá!
Classe MIDLets.
Classe MIDLets.
- /*
- *
- * ControledeGastos.java
- *
- *
- *
- */
-
- package midlet;
-
- import controleForm.AlteraFormulario;
- import form.ComunicacaoServidorWeb;
- import form.ReferenciaDespesas;
- import form.RegistroDespesas;
- import java.io.InputStream;
- import javax.microedition.midlet.*;
- import javax.microedition.lcdui.*;
-
- /**
- *
- * Esta é a classe principal ou seja e o MIDLets propriamente dito, nele e onde temos o ciclo de vida do
- * MIDLets e por ele que manipulamos todo o aplicativo temos nela o método
- * “public void startApp()” que e o primeiro método a ser executado quando o aplicativo for aberto,
- * temos também o método “public void pauseApp()” que e solicitado quando tiver que interromper a
- * execução do aplicativo para fazer uma outra tarefa no aparelho como por exemplo atender uma ligação,
- * e temos o método “public void destroyApp(boolean unconditional)” que e executado quando esta sendo
- * fechado o aplicativo, são estes três métodos que compõem o ciclo de vida do MIDLets eles são
- * obrigatórios em um MIDLets.
- * Temos também o método “public void commandAction(Command c, Displayable s)” que e nele que pegamos
- * as ações efetuados pelo usuário.
- * E o método “private String lerArquivoHelp()” que e por ele que lemos o arquivo de HELP
- * que esta armazenado em uma arquivo (.TXT)
- *
- *
- */
-
- public class ControledeGastos extends MIDlet implements CommandListener {
-
- private Display display = null;
- private Form formMaim = null;
- private Ticker ticker = null;
- private Image image = null;
- private Alert alerta = null;
- private Command commExit, commControleDeGasto,
- commDescricaoGasto, commLogin, commHelp;
- private AlteraFormulario alteraFormulario = null;
-
-
- public ControledeGastos(){
- display = Display.getDisplay(this);
- formMaim = new Form( "Controle de Despesas" );
- formMaim.addCommand( commExit = new Command("Sair", Command.EXIT, 0) );
- formMaim.addCommand( commControleDeGasto = new Command( "Controle de Gasto", Command.OK, 1) );
- formMaim.addCommand( commDescricaoGasto = new Command( "Referência de Gasto",Command.OK, 1) );
- formMaim.addCommand( commLogin = new Command( "Acesso Servidor Web",Command.OK, 1) );
- formMaim.addCommand( commHelp = new Command( "Help",Command.HELP, 1) );
- formMaim.setTicker( ticker = new Ticker( "Ederson Thomazini, Fernando Schutz.MS & Adriano Sabo" ) );
- try{
- image = Image.createImage( "/imagem/Inicial.png" );
- }catch (Exception e) { }
- formMaim.append(new ImageItem( null, image, ImageItem.LAYOUT_CENTER, null) );
- formMaim.setCommandListener( this );
- alteraFormulario = AlteraFormulario.instancia(display, formMaim);
- }
-
- //******************************************************************************
-
- public void startApp() {
- display.setCurrent(formMaim);
- }
-
- public void pauseApp() { }
-
- public void destroyApp(boolean unconditional) { }
-
- //******************************************************************************
-
- public void commandAction(Command c, Displayable s){
- if (c == commExit){
- destroyApp(false);
- notifyDestroyed();
- }else if (c == commControleDeGasto){
- alteraFormulario.pushForm( new RegistroDespesas("Total R$:0.00", this, ticker) );
- }else if (c == commDescricaoGasto){
- alteraFormulario.pushForm( new ReferenciaDespesas("Referência de Despesas.", this, ticker));
- }else if (c== commLogin){
- alteraFormulario.pushForm( new ComunicacaoServidorWeb("Acesso Servidor Web.", this, ticker));
- }else if (c == commHelp) alerta(lerArquivoHelp(), formMaim);
- }
-
- private String lerArquivoHelp(){
- try{
- int chr = 0;
- InputStream arquivoHelp = getClass().getResourceAsStream("/ajuda/Ajuda.Thomazini");
- StringBuffer stb = new StringBuffer();
- while ((chr = arquivoHelp.read())!= -1)
- stb.append((char)chr);
- return stb.toString();
- }catch (Exception e){
- alerta("Erro ao abrir o arquivo de ajuda!", formMaim);
- }
- return null;
- }
-
- public AlteraFormulario alteraFormulario(){
- return alteraFormulario;
- }
-
- public void alerta(String mensagem, Form frm){
- try{
- Image img = Image.createImage("/imagem/Duke.png");
- alerta = new Alert("Controle de Despesas", mensagem, img,null);
- alerta.setTicker(ticker);
- alerta.setTimeout(Alert.FOREVER);
- display.setCurrent(alerta, frm);
- }catch (Exception e){}
- }
-
- }
Classe de manipulação de formulários.
- /*
- * AlteraFormulario.java
- *
- *
- *
- */
-
- package controleForm;
-
- import java.util.Stack;
- import javax.microedition.lcdui.Display;
- import javax.microedition.lcdui.Displayable;
-
- /**
- *
- * Esta classe tem como função alterar no display os formulários da aplicação,
- * quando e dado um “new” e passado para ela o display do MIDLets e o formulário Principal,
- * quando for chamado o método “public void pushDisplayable(Displayable newDisplayable)”
- * e passado para ele a classe que tem o novo formulário com isso ela troca o formulário
- * principal com o que foi solicitado pelo usuário.
- * Quando quiser voltar pro formulário principal e chamado o método
- * “ public void popDisplayable()” que retorna o formulário principal no display ou o formulario que esttiver
- *na vez de ser mostrado, ele trabalha em forma de pilha.
- *
- *
- *
- */
-
- public class AlteraFormulario extends Stack{
-
- private Display display = null;
- private Displayable mainForm = null;
- private static AlteraFormulario alteraFormulario = null;
-
- private AlteraFormulario(Display display, Displayable mainForm){
- this.display = display;
- this.mainForm = mainForm;
- }
-
- public static AlteraFormulario instancia(Display display, Displayable mainForm){
- if(alteraFormulario == null)
- alteraFormulario = new AlteraFormulario(display, mainForm);
- return alteraFormulario;
- }
-
- public void pushForm(Displayable newForm){
- push(display.getCurrent());
- display.setCurrent(newForm);
- }
-
- public void popForm(){
- if (empty() == false)
- display.setCurrent((Displayable) pop());
- else
- display.setCurrent(mainForm);
- }
-
- }
Classe e a responsável por manipular os RMS .
- /*
- * ArmazenamentoPersistente.java
- *
- *
- */
-
- package rms;
-
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.util.Vector;
- import javax.microedition.rms.RecordEnumeration;
- import javax.microedition.rms.RecordStore;
-
- /**
- *
- * Esta classe e a responsável por manipular os RMS (Record Management System),
- * temos nela os seguintes métodos “public RecordStore openRecStore(String nome)”
- * que serve para abrir um RMS s ele já existir ele abre senão ele cria um armazém de
- * registros, temos também o método “public void closeRecStore(RecordStore rms)”
- * que serve para fechar um RMS, temos o método “public void deleteRecStore(String nome)”
- * que e o responsável por excluir um registro armazenado no RMS, e também o método
- * “public void gravarRegistro(RecordStore rms, String text)” que e o responsável por gravar
- * registros no RMS, temos outros métodos mas são semelhantes a estes citados que só muda os
- * parâmetros a serem passados a eles mas a funcionalidade e a mesma.
- *
- *
- *
- */
-
- public class ArmazenamentoPersistente {
-
- private Vector vetorGasto = null;
- private ByteArrayInputStream istrmBytes = null;
- private DataInputStream istrmDataType = null;
- private ByteArrayOutputStream ostrmBytes = null;
- private DataOutputStream ostrmDataType = null;
- private RecordEnumeration numeroRms = null;
- private OrdenaRms ordenaRms = null;
-
- public ArmazenamentoPersistente() {
- vetorGasto = new Vector();
- ostrmBytes = new ByteArrayOutputStream();
- ostrmDataType = new DataOutputStream(ostrmBytes);
- }
-
- public RecordEnumeration initEnumeration(RecordStore rms){
- try{
- if (rms.getNumRecords() > 0){
- ordenaRms = new OrdenaRms();
- numeroRms = rms.enumerateRecords(null, ordenaRms, false);
- }
- }catch (Exception e){System.out.println("Thomazini "+ e);}
- return numeroRms;
- }
-
- public RecordStore openRecStore(String nome){
- try{
- return RecordStore.openRecordStore(nome, true);
- }catch (Exception e){return null;}
- }
-
- public void closeRecStore(RecordStore rms){
- try{
- rms.closeRecordStore();
- ostrmBytes.close();
- ostrmDataType.close();
- }catch (Exception e){return;}
- }
-
- public void deleteRecStore(String nome){
- try{
- RecordStore.deleteRecordStore(nome);
- }catch (Exception e){return;}
- }
-
- public void gravarRegistro(RecordStore rms, String text){
- try{
- byte[] record;
- ostrmBytes.reset();
- ostrmDataType.writeUTF(text);
- ostrmDataType.flush();
- record = ostrmBytes.toByteArray();
- rms.addRecord(record, 0, record.length);
- ostrmBytes.reset();
- }catch (Exception e) {return;}
- }
-
- public void gravarRegistro(RecordStore rms, String vDescricao, int vQnt, float vValor){
- int [] qnt = {vQnt};
- String[] descricao = {vDescricao};
- float[] valor = {vValor};
- gravarRms(rms, descricao,qnt,valor);
- }
-
- private void gravarRms(RecordStore rms, String[] vDescricao,int[] vQnt, float[] vValor) {
- try {
- ostrmBytes.reset();
- byte[] record = null;
- for (int i = 0; i < vDescricao.length; i++){
- ostrmDataType.writeUTF(vDescricao[i]);
- ostrmDataType.writeInt(vQnt[i]);
- ostrmDataType.writeFloat(vValor[i]);
- ostrmDataType.flush();
- record = ostrmBytes.toByteArray();
- rms.addRecord(record, 0, record.length);
- ostrmBytes.reset();
- }
- }catch (Exception e) {return;}
- }
-
- }
Classe para ordenar o RMS.
-
-
- /*
- * OrdenaRms.java
- *
- *
- */
-
- package rms;
-
- import java.io.ByteArrayInputStream;
- import java.io.DataInputStream;
- import javax.microedition.rms.RecordComparator;
-
- /**
- *
- * Esta e a classe responsável por fazer a ordenação dos dados dos registros,
- * ela contem os seguinte método
- * “public int compare(byte[] rec1, byte[] rec2)” que e o responsável por ordenar os dados informados
- * que no casso ordena em ordem alfabética, e temos também o método
- * “public void compareClose()” que e o responsável por finalizar o processo de ordenação.
- *
- *
- *
- */
-
- public class OrdenaRms implements RecordComparator {
-
- private byte[] record = null;
- private ByteArrayInputStream strmBytes = null;
- private DataInputStream strmDataType = null;
-
- public OrdenaRms() { }
-
- public void compareClose(){
- try{
- if (strmBytes != null)
- strmBytes.close();
- if (strmDataType != null)
- strmDataType.close();
- }catch (Exception e){}
- }
-
- public int compare(byte[] rec1, byte[] rec2){
- String valor1 = null, valor2 = null;
- try{
- int maxsize = Math.max(rec1.length, rec2.length);
- record = new byte[maxsize];
- strmBytes = new ByteArrayInputStream(rec1);
- strmDataType = new DataInputStream(strmBytes);
- valor1 = strmDataType.readUTF();
- strmBytes = new ByteArrayInputStream(rec2);
- strmDataType = new DataInputStream(strmBytes);
- valor2 = strmDataType.readUTF();
- int resultado = valor1.compareTo(valor2);
- if (resultado == 0)
- return RecordComparator.EQUIVALENT;
- else if (resultado < 0)
- return RecordComparator.PRECEDES;
- else
- return RecordComparator.FOLLOWS;
- }catch (Exception e){
- return RecordComparator.EQUIVALENT;
- }
- }
- }
Classe que será utilizada para cirar os objetos que serão manipulados no aplicativo.
- /*
- * ItemRms.java
- *
- *
- */
-
- package rms;
-
- /**
- *
- * Esta classe é a responsável por agrupar nela o descrição informada com o
- * ID da mesma armazenando os 2 em um objeto. Temos os seguintes métodos
- * “public void setText(String text)” que serve para trocar a descrição do item, temos também o método
- * “public String getText()” e o responsável para ler a descrição do item, temos também o método
- * “public int getRecordId()” que lê o numero do ID do item..
- *
- *
- *
- */
-
- public class ItemRms {
- private String texto;
- private int id;
-
- public ItemRms(String texto, int id) {
- this.texto = texto;
- this.id = id;
- }
- public String getTexto(){
- return texto;
- }
-
- public void setTexto(String texto){
- this.texto = texto;
- }
-
- public int getId(){
- return id;
- }
- }
Classe Cadastro de Tipos de Gastos.
-
-
- /*
- * ReferenciaDespesas.java
- *
- *
- */
-
- package form;
-
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.util.Vector;
- import javax.microedition.lcdui.Alert;
- import javax.microedition.lcdui.Choice;
- import javax.microedition.lcdui.ChoiceGroup;
- import javax.microedition.lcdui.Command;
- import javax.microedition.lcdui.CommandListener;
- import javax.microedition.lcdui.Displayable;
- import javax.microedition.lcdui.Form;
- import javax.microedition.lcdui.Item;
- import javax.microedition.lcdui.ItemCommandListener;
- import javax.microedition.lcdui.ItemStateListener;
- import javax.microedition.lcdui.StringItem;
- import javax.microedition.lcdui.TextField;
- import javax.microedition.lcdui.Ticker;
- import javax.microedition.rms.RecordEnumeration;
- import javax.microedition.rms.RecordStore;
- import midlet.ControledeGastos;
- import rms.ArmazenamentoPersistente;
- import rms.ItemRms;
- import rms.OrdenaRms;
-
- /**
- *
- * Esta e a classe que tem o formulário de Referência de gastos e nela que o usuário vai fazer o
- * cadastro de seus possíveis gastos, nela temos os seguintes métodos.
- * O método “protected void referencialistaVetor()” e o responsável por listar os dados que
- * estão no vetor e criar na telas os componentes que vão mostrar as referências cadastradas,
- * Temos também o método “private void referenciaOrdenaVetor(RecordStore rms)” este e o método que
- * lista o conteúdo do RMS e armazena dentro de um vetor para ficar mais fácil de manipular os dados,
- * temos o método “public void itemStateChanged(Item item)” que é onde nos pegamos os eventos dos
- * componentes (ChoiceGroup), temos o método “public void commandAction(Command c, Displayable d)”
- * que e onde pegamos os eventos do menu do aparelho e também o método
- * “public void commandAction(Command c, Item item)” que onde e pego o evento do botão.
- *
- *
- *
- */
-
- public class ReferenciaDespesas extends Form implements ItemStateListener,
- CommandListener,
- ItemCommandListener {
- private Alert alertErro = null;
- private StringItem buttonGravar = null;
- private TextField tfDescricao = null;
- private Command commGravar = null,
- commExit = null;
- private Vector vetorItem = null;
- private ChoiceGroup cgItem = null;
- private String REC_STORE_REFERENCIA_GASTO = null;
- private ByteArrayInputStream istrmBytes = null;
- private DataInputStream istrmDataType = null;
- private ByteArrayOutputStream ostrmBytes = null;
- private DataOutputStream ostrmDataType = null;
- private RecordEnumeration numeroRms = null;
- private OrdenaRms ordenaRms = null;
- private ControledeGastos frmControle = null;
- private RecordStore referenciaRms = null;
- private ArmazenamentoPersistente referenciaGasto = null;
-
-
- public ReferenciaDespesas(String titulo,ControledeGastos frmControle, Ticker ticker) {
- super(titulo);
- this.frmControle = frmControle;
- vetorItem = new Vector();
- REC_STORE_REFERENCIA_GASTO = "rmsReferenciaGasto";
- referenciaRms =(referenciaGasto = new ArmazenamentoPersistente()).openRecStore(REC_STORE_REFERENCIA_GASTO);
- buttonGravar = new StringItem(" Gravar","", Item.BUTTON);
- buttonGravar.setDefaultCommand(commGravar = new Command("Gravar", Command.ITEM, 1));
- buttonGravar.setItemCommandListener(this);
- buttonGravar.setPreferredSize(235,10);
- setTicker(ticker);
- addCommand(commExit = new Command( "Sair", Command.EXIT, 1 ));
- append( tfDescricao = new TextField( "Descrição:","",80, TextField.ANY ));
- append( buttonGravar );
- append( cgItem = new ChoiceGroup( "", Choice.MULTIPLE ));
- setCommandListener(this);
- setItemStateListener(this);
- listarOrdenarRms( referenciaRms );
- }
-
- private void listarOrdenarRms(RecordStore rms){
- try{
- referenciaOrdenaVetor(rms);
- referencialistaVetor();
- }catch (Exception e){
- msg("Ocorreu um erro na listagem dos registros armazenados!");
- }
- }
-
- protected void referencialistaVetor(){
- try{
- for (int i = cgItem.size(); i > 0; i--)
- cgItem.delete(i - 1);
- ItemRms item;
- String texto;
- StringBuffer strb;
- for (int i = 0; i < vetorItem.size(); i++){
- item = (ItemRms) vetorItem.elementAt(i);
- texto = (item.getTexto());
- strb = new StringBuffer();
- strb.append(texto);
- cgItem.append(strb.toString(), null);
- }
- }catch (Exception e){
- msg("Erro ao listar os registros!");
- }
- }
-
- private void referenciaOrdenaVetor(RecordStore rms){
- try{
- vetorItem.removeAllElements();
- byte[] recData = new byte[referenciaRms.getSize()];
- ByteArrayInputStream istrmBytes = new ByteArrayInputStream(recData);
- DataInputStream istrmDataType = new DataInputStream(istrmBytes);
- numeroRms = referenciaGasto.initEnumeration(rms);
- numeroRms.rebuild();
- while (numeroRms.hasNextElement()){
- istrmBytes.reset();
- int id = numeroRms.nextRecordId();
- rms.getRecord(id, recData, 0);
- ItemRms item = new ItemRms(istrmDataType.readUTF(), id);
- vetorItem.addElement(item);
- }
- istrmBytes.close();
- istrmDataType.close();
- }catch (Exception e){
- msg("Erro ao ordenar os registros!");
- }
- }
-
- protected void gravar(){
- try{
- referenciaGasto.gravarRegistro(referenciaRms, tfDescricao.getString());
- tfDescricao.delete(0,tfDescricao.size());
- listarOrdenarRms(referenciaRms);
- }catch (Exception e){
- msg("Ocorreu uma falha na gravação do registro!");
- }
- }
-
- public void itemStateChanged(Item item){
- ChoiceGroup cgGroup;
- cgGroup = (ChoiceGroup) item;
- boolean selected[] = new boolean[cgGroup.size()];
- cgGroup.getSelectedFlags(selected);
- for (int i = 0; i < cgGroup.size(); i++){
- if (selected[i]){
- ItemRms vItem = (ItemRms) vetorItem.elementAt(i);
- try{
- referenciaRms.deleteRecord(vItem.getId());
- }catch (Exception e){
- msg("Erro ao excluir o registro!");
- }break;
- }
- }listarOrdenarRms(referenciaRms);
- }
-
- public void commandAction(Command c, Displayable d){
- if (c == commExit){
- referenciaGasto.closeRecStore(referenciaRms);
- frmControle.alteraFormulario().popForm();
- }
- }
-
- public void commandAction(Command c, Item item) {
- if (item == buttonGravar)
- if (tfDescricao.size() != 0){gravar();}
- }
-
- private void msg(String msg){
- frmControle.alerta(msg, this);
- }
- }
Cadastro de Gastos.
- /*
- * RegistroDespesas.java
- *
- *
- */
-
- package form;
-
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.util.Vector;
- import javax.microedition.lcdui.Alert;
- import javax.microedition.lcdui.Choice;
- import javax.microedition.lcdui.ChoiceGroup;
- import javax.microedition.lcdui.Command;
- import javax.microedition.lcdui.CommandListener;
- import javax.microedition.lcdui.Displayable;
- import javax.microedition.lcdui.Form;
- import javax.microedition.lcdui.Item;
- import javax.microedition.lcdui.ItemCommandListener;
- import javax.microedition.lcdui.ItemStateListener;
- import javax.microedition.lcdui.StringItem;
- import javax.microedition.lcdui.TextField;
- import javax.microedition.lcdui.Ticker;
- import javax.microedition.rms.RecordEnumeration;
- import javax.microedition.rms.RecordStore;
- import midlet.ControledeGastos;
- import rms.ArmazenamentoPersistente;
- import rms.ItemRms;
- import rms.OrdenaRms;
-
- /**
- *
- * Esta e a classe que tem o formulário de Controle de gastos e nela que o usuário vai fazer
- * o cadastro de seus gastos, nela temos os seguintes métodos.
- * O método “protected ChoiceGroup getcgReferencia()” que é o responsável por criar o componente
- * (ChoiceGroup) que vai conter os dados do RMS de Referência de gastos, temos também o método
- * “protected void cgReferenciaItem()”que é o responsável por listas todos os registro que estão no
- * RMS Referência de gastos no componente (ChoiceGroup), e temos o método
- * “protected void despesasListarVetor()” que e o responsável por listar os dados que estão no vetor
- * e criar os componentes para exibição dos gastos cadastrados, e o método
- * “protected void despesasOrdenaVetor(RecordStore rms)” e o responsável por listar os dados do
- * RMS no vetor ele percorre todo o armazém de registro e grava dentro do vetor para ficar mais
- * melhor a manipulação destes dados, temos o método “public void itemStateChanged(Item item)”
- * que é onde nos pegamos os eventos dos
- * componentes (ChoiceGroup), temos o método “public void commandAction(Command c, Displayable d)”
- * que e onde pegamos os eventos do menu do aparelho e também o método
- * “public void commandAction(Command c, Item item)” que onde e pego o evento do botão.
- *
- *
- *
- */
-
- public class RegistroDespesas extends Form implements ItemStateListener,
- CommandListener,
- ItemCommandListener{
- private Alert alertErro;
- private ChoiceGroup cgItem;
- private StringItem buttonGravar;
- private ControledeGastos frmControle;
- private ChoiceGroup cgReferenciaGasto;
- private TextField tfValor,tfQnt;
- private Command commExit, commGravar;
- private Vector vetorDespesa;
- private float total;
- private String REC_STORE_REFERENCIA_GASTO;
- private String REC_STORE_REGISTRO_DESPESAS;
- private ByteArrayInputStream istrmBytes;
- private DataInputStream istrmDataType;
- private ByteArrayOutputStream ostrmBytes;
- private DataOutputStream ostrmDataType;
- private RecordEnumeration numeroRms;
- private OrdenaRms ordenaRms;
- private RecordStore referenciaRms, registoDespesasRms;
- private ArmazenamentoPersistente referenciaGasto,registoDespesas;
-
- public RegistroDespesas(String titulo,ControledeGastos frmControle, Ticker ticker) {
- super(titulo);
- this.frmControle = frmControle;
- setTicker(ticker);
- vetorDespesa = new Vector();
- REC_STORE_REFERENCIA_GASTO = "rmsReferenciaGasto";
- REC_STORE_REGISTRO_DESPESAS = "rmsRegistroGasto";
- referenciaRms = (referenciaGasto = new ArmazenamentoPersistente()).openRecStore(REC_STORE_REFERENCIA_GASTO);
- registoDespesasRms = (registoDespesas = new ArmazenamentoPersistente()).openRecStore(REC_STORE_REGISTRO_DESPESAS);
- buttonGravar = new StringItem(" Gravar","",Item.BUTTON);
- buttonGravar.setDefaultCommand( commGravar = new Command("Gravar",Command.ITEM, 1) );
- buttonGravar.setItemCommandListener(this);
- buttonGravar.setPreferredSize(235,10);
- addCommand( commExit = new Command("Sair.",Command.EXIT, 1) );
- append( tfQnt = new TextField("Quantidade.:","", 10, TextField.NUMERIC) );
- append( tfValor = new TextField("Valor Gasto:","",10, TextField.DECIMAL) );
- getcgReferencia();
- append(cgReferenciaGasto);
- append(buttonGravar);
- append(cgItem = new ChoiceGroup("", Choice.MULTIPLE));
- cgReferenciaItem();
- listarOrdenarRms(registoDespesasRms);
- setCommandListener(this);
- setItemStateListener(this);
- }
-
- private void listarOrdenarRms(RecordStore rms){
- try{
- despesasOrdenaVetor(rms);
- despesasListarVetor();
- }catch (Exception e){
- msg("Ocorreu um erro na listagem dos registros armazenados!");
- }
- }
-
- private void gravar(){
- try{
- registoDespesas.gravarRegistro(registoDespesasRms, cgReferenciaGasto.getString(cgReferenciaGasto.getSelectedIndex()),
- Integer.parseInt(tfQnt.getString()), Float.parseFloat(tfValor.getString()));
- tfValor.delete(0,tfValor.size());
- tfQnt.delete(0, tfQnt.size());
- cgReferenciaGasto.setSelectedIndex(0,true);
- listarOrdenarRms(registoDespesasRms);
- }catch (Exception e){
- msg("Ocorreu uma falha na gravação do registro!");
- }
- }
-
- protected ChoiceGroup getcgReferencia() {
- if (cgReferenciaGasto == null) {
- cgReferenciaGasto = new ChoiceGroup("Referência..:", Choice.POPUP,new String[]{""},null);
- }return cgReferenciaGasto;
- }
-
- protected void cgReferenciaItem(){
- try{
- byte[] recData = new byte[referenciaRms.getSize()];
- ByteArrayInputStream istrmBytes = new ByteArrayInputStream(recData);
- DataInputStream istrmDataType = new DataInputStream(istrmBytes);
- numeroRms = referenciaGasto.initEnumeration(referenciaRms);
- numeroRms.rebuild();
- while (numeroRms.hasNextElement()){
- istrmBytes.reset();
- int id = numeroRms.nextRecordId();
- referenciaRms.getRecord(id, recData, 0);
- ItemRms item = new ItemRms(istrmDataType.readUTF(), id);
- cgReferenciaGasto.append(item.getTexto(),null);
- }
- istrmBytes.close();
- istrmDataType.close();
- }catch (Exception e){
- msg("Ocorreu um erro na listagem dos dados de referência!");
- }
- }
-
- protected void despesasListarVetor(){
- try{
- for (int i = cgItem.size(); i > 0; i--)
- cgItem.delete(i - 1);
- ItemRms item;
- String text;
- StringBuffer strb;
- for (int i = 0; i < vetorDespesa.size(); i++){
- item = (ItemRms) vetorDespesa.elementAt(i);
- text = item.getTexto();
- strb = new StringBuffer();
- strb.append(text);
- cgItem.append(strb.toString(), null);
- }
- }catch (Exception e){
- msg("Erro ao listar os registros!");
- }
- }
-
- protected void despesasOrdenaVetor(RecordStore rms) {
- try{
- total = 0;
- vetorDespesa.removeAllElements();
- byte[] recData = new byte[rms.getSize()];
- ByteArrayInputStream istrmBytes = new ByteArrayInputStream(recData);
- DataInputStream istrmDataType = new DataInputStream(istrmBytes);
- numeroRms = registoDespesas.initEnumeration(rms);
- numeroRms.rebuild();
- while (numeroRms.hasNextElement()){
- istrmBytes.reset();
- int id = numeroRms.nextRecordId();
- rms.getRecord(id, recData, 0);
- String vDesc = istrmDataType.readUTF();
- int vQuant = istrmDataType.readInt();
- float vValor = istrmDataType.readFloat();
- total = total + vValor;
- ItemRms item = new ItemRms (" " + vQuant + "-" + vDesc +" R$: "+ vValor, id);
- vetorDespesa.addElement(item);
- }
-
- }catch (Exception e){
- msg("Erro ao ordenar os registros!");
- }setTitle("Total R$: "+ total);
- }
-
- public void itemStateChanged(Item item){
- if (item != cgReferenciaGasto){
- ChoiceGroup cgGroup;
- cgGroup = (ChoiceGroup) item;
- boolean selected[] = new boolean[cgGroup.size()];
- cgGroup.getSelectedFlags(selected);
- for (int i = 0; i < cgGroup.size(); i++){
- if (selected[i]){
- ItemRms vItem = (ItemRms) vetorDespesa.elementAt(i);
- try{
- registoDespesasRms.deleteRecord(vItem.getId());
- }catch (Exception e){
- msg("Erro ao excluir o registro!");
- }break;
- }
- }listarOrdenarRms(registoDespesasRms);
- }
- }
- public void commandAction(Command c, Displayable s){
- if (c == commExit){
- referenciaGasto.closeRecStore(referenciaRms);
- registoDespesas.closeRecStore(registoDespesasRms);
- frmControle.alteraFormulario().popForm();
- }
- }
-
- public void commandAction(Command c, Item item) {
- if (item == buttonGravar)
- if (cgReferenciaGasto.size() != 0){
- if (!validaCampoObrigatorio())
- gravar();
- }
- }
-
- private boolean validaCampoObrigatorio(){
- boolean result;
- if(result = tfQnt.size() == 0){
- msg("Quantidade campo obrigatório");
- }else if (result = tfValor.size() == 0){
- msg("Valor campo obrigatório");
- }else if (result = cgReferenciaGasto.getString(cgReferenciaGasto.getSelectedIndex()) == "")
- msg("Referência campo obrigatório");
-
- return result;
- }
-
- private void msg(String msg){
- frmControle.alerta(msg, this);
- }
-
- }
Classe para a entrada de login e senha para o servidor.
-
-
- /*
- * ComunicacaoServidorWeb.java
- *
-
-
- package form;
-
- import conexao.ConexaoHttp;
- import java.io.ByteArrayInputStream;
- import java.io.DataInputStream;
- import java.util.Vector;
- import javax.microedition.io.HttpConnection;
- import javax.microedition.lcdui.Command;
- import javax.microedition.lcdui.CommandListener;
- import javax.microedition.lcdui.Displayable;
- import javax.microedition.lcdui.Form;
- import javax.microedition.lcdui.Image;
- import javax.microedition.lcdui.ImageItem;
- import javax.microedition.lcdui.TextField;
- import javax.microedition.lcdui.Ticker;
- import javax.microedition.rms.RecordEnumeration;
- import javax.microedition.rms.RecordStore;
- import midlet.ControledeGastos;
- import rms.ArmazenamentoPersistente;
-
- /**
- *
- * Esta classe tem a função de solicitar ao usuário o Login e senha para fazer a conexão
- * com um servidor web, feito isso será disparado uma Thread que é pelo método “run()”
- * que e tratado os eventos, O método “public void commandAction(Command c, Displayable s)”
- * é onde e pego os eventos dos componentes e passado para o método run() que processa o comando solicitado.
- * O método “private boolean enviaRMS(RecordStore rms)” e usado quando for pedido pra fazer
- * o envio dos dados para o servidor web e nele que é percorrido tudo o RMS (Record Management System)
- * e enviado para o servidor, quando os dados chegarem lá o responsável pelo processamento
- * e o Servlets que atualiza o banco de dados correspondente.
- *
- *
- *
- *
- */
-
- public class ComunicacaoServidorWeb extends Form implements CommandListener, Runnable {
-
- private ControledeGastos frmLogin = null;
- private Command commVoltar = null,
- commLogin = null,
- commEnviar = null;
- private TextField tfLogin = null,
- tfSenha = null,
- tfUrl = null;
- private RecordEnumeration numeroRms = null;
- private ArmazenamentoPersistente registoDespesas = null;
- private Thread commThread = null;
- private HttpConnection http = null;
- private Command commCaptura = null;
- private ConexaoHttp conexaoServer = null;
- private String REC_STORE_REGISTRO_DESPESAS = null;
- private RecordStore registoDespesasRms = null;
-
- public ComunicacaoServidorWeb(String titulo, ControledeGastos frmLogin, Ticker ticker) {
- super(titulo);
- this.frmLogin = frmLogin;
- setTicker(ticker);
- REC_STORE_REGISTRO_DESPESAS = "rmsRegistroGasto";
- registoDespesasRms = (registoDespesas = new ArmazenamentoPersistente()).openRecStore(REC_STORE_REGISTRO_DESPESAS);
-
- append(tfUrl = new TextField("URL","http://localhost:8080/Servlet/GetNpostServlet",200, TextField.URL));
- append(tfLogin = new TextField("Usuário", "",20, TextField.ANY));
- append(tfSenha = new TextField("Senha", "",20, TextField.PASSWORD));
- addCommand(commVoltar = new Command("Sair",Command.EXIT,1));
- addCommand(commLogin = new Command("Acessar",Command.OK,1));
-
- try{
- Image image = Image.createImage("/imagem/jug_patch.gif");
- append(new ImageItem(null,image,ImageItem.LAYOUT_CENTER,null));
- }catch (Exception e) {}
- setCommandListener(this);
- }
-
- public void commandAction(Command c, Displayable s){
- synchronized (this) {
- if (commThread != null) {return;}
- commCaptura = c;
- commThread = new Thread(this);
- commThread.start();
- }
- }
-
- public void run() {
- if (commCaptura == commVoltar) {
- frmLogin.alteraFormulario().popForm();
- } else if (commCaptura == commLogin) {
- try{
- conexaoServer = new ConexaoHttp(tfUrl.getString());
- if (conexaoServer.processoRmsPOST(("status=login"+
- "&login=" + tfLogin.getString()+
- "&senha=" + tfSenha.getString()).getBytes())){
- if (conexaoServer.retornoConexao().equals(""))
- msg("Usuário/Senha Inválido(s)");
- else{
- if(commEnviar == null)
- addCommand(commEnviar = new Command("Enviar",Command.OK,1));
- msg("Seja bem vindo Sr.(a): " + conexaoServer.retornoConexao());
- }
- }else msg("Falha na autenticação do Login!");
- }finally{conexaoServer = null;}
- }else if (commCaptura == commEnviar){
- try{
- conexaoServer = new ConexaoHttp(tfUrl.getString());
- enviaRMS(registoDespesasRms);
- }finally{
- removeCommand(commEnviar);
- conexaoServer = null;
- }
- }
- synchronized (this) {commThread = null;}
- }
-
- private void enviaRMS(RecordStore rms){
- try{
- byte[] recData = new byte[rms.getSize()];
- ByteArrayInputStream istrmBytes = new ByteArrayInputStream(recData);
- DataInputStream istrmDataType = new DataInputStream(istrmBytes);
- numeroRms = registoDespesas.initEnumeration(rms);
- numeroRms.rebuild();
- try{
- while (numeroRms.hasNextElement()){
- istrmBytes.reset();
- int id = numeroRms.nextRecordId();
- rms.getRecord(id, recData, 0);
- conexaoServer.processoRmsPOST(("status="+conexaoServer.retornoConexao()+
- "&desc="+String.valueOf(istrmDataType.readUTF())+
- "&qnt="+String.valueOf(istrmDataType.readInt())+
- "&valor="+String.valueOf(istrmDataType.readFloat())+
- "&id="+String.valueOf(id)).getBytes());
- }
- msg("Transferência efetuada com sucesso!");
- }finally {
- istrmBytes.close();
- istrmDataType.close();
- }
- }catch (Exception e){
- msg("Problemas no envio do arquivo!");
- }
- }
-
- private void msg(String msg){
- frmLogin.alerta(msg, this);
- }
-
- }
Classe que faz a conexão com o servidor.
- /*
- * ConexaoHttp.java
- *
- *
- *
- */
- package conexao;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import javax.microedition.io.Connector;
- import javax.microedition.io.HttpConnection;
- /**
- *
- * Esta classe tem como função fazer a conexão com o servidor web, é por ela que é enviado as solicitações
- * de login e também os dados do RMS.
- * O metodo “public boolean processoRmsPOST(byte[] dados)”
- * que é o responsável por fazer toda a parte de solicitações com o servidor, como: enviar os dados do RMS para o servidor web e fazer login e o método
- * “private boolean processServerResponse(HttpConnection httpConexao, InputStream dados)”
- * ele que processa o retorno do servidor se tiver alguma informação vindo do servidor para o
- * aparelho é nele que é tratado.
- *
- *
- *
- */
- public class ConexaoHttp {
- private String url = null;
- private String result = null;
- public ConexaoHttp(String url){
- this.url = url;
- }
- public boolean processoRmsPOST(byte[] dados) {
- HttpConnection httpConexao = null;
- OutputStream oStrm = null;
- InputStream iStrm = null;
- boolean valorRetorno = false;
- try{
- try{
- httpConexao = (HttpConnection)Connector.open(this.url);
- httpConexao.setRequestMethod(HttpConnection.POST);
- httpConexao.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//Esta linha e obrigatoria para o metodo POS, isso indica que os dados estão indo separados da URL.
- oStrm = httpConexao.openOutputStream();
- oStrm.write(dados);//
- iStrm = httpConexao.openInputStream();
- valorRetorno = processServerResponse(httpConexao, iStrm);
- }finally{
- if (iStrm != null) iStrm.close();
- if (oStrm != null) oStrm.close();
- if (httpConexao != null) httpConexao.close();
- }if (valorRetorno == false){}
- }catch(Exception e){}
- return valorRetorno;
- }
- private boolean processServerResponse(HttpConnection httpConexao, InputStream dados) throws IOException {
- result = "";
- if ( httpConexao.getResponseCode() == HttpConnection.HTTP_OK ) {
- String urlNew = httpConexao.getHeaderField("Custom-newURL");
- if (urlNew != null)
- this.url = urlNew;
- int length = (int) httpConexao.getLength();
- String str = "";
- if (length != -1) {
- byte servletData[] = new byte[length];
- dados.read(servletData);
- str = new String(servletData);
- }else{
- ByteArrayOutputStream bStrm = new ByteArrayOutputStream();//isso serve para que quando tiver um retorno muito grande ele vai lendo e armazenando em uma array de bytes.
- int posicao = 0;
- while ((posicao = dados.read()) != -1) {
- bStrm.write(posicao);
- str = new String(bStrm.toByteArray());
- bStrm.close();
- }
- }result = str;
- return true;
- }else return false;
- }
- public String retornoConexao(){
- return result;
- }
- } ]
- É isso ai galera espero que tenham gostado e brevemente teremos mais. Até a próxima! De seu sempre amigo Bruno Rafael.
Comentários
Postar um comentário