Boa tarde, galera!
tenho uma aplicação de cadastro de clientes e quando faço cadastro tudo ocorre bem, mas quando quero listar apresenta erro, me ajudem a corrigir esse erro.
grato.
package principal;
import conexao.GetPostRegistros;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Vector;
import javax.microedition.rms.*;
import rms.RmsVenda;
public class VendaRemota extends MIDlet implements CommandListener, Runnable {
private Display display;
private List telaInicial, telaClientes, telaProdutos, telaPedidos;
private Alert alerta;
private Command sair, sobre, voltar, salvar, novo, apagar;
private Form adicionarCliente, adicionarProduto, adicionarPedido, telaInformacoes;
private TextField tfCliente,tfEndereco,tfTelefone,tfSenha,tfLogin,tfEmail,tfCodigo, tfProduto, tfQuantidade,tfTam, tfPreco;
private Vector vecClientes, vecProdutos, vecPedidos = null;
boolean deletedFlags[] = null;
private ChoiceGroup clientesCG, produtosCG;
boolean gravacaoOK = false;
//RMS
private RmsVenda rmsPedidos, rmsClientes, rmsProdutos;
private RecordStore RSPedidos, RSClientes, RSProdutos;
private String BDClientes = "BancoClientes";
private String BDPedidos = "BancoPedidos";
private String BDProdutos = "BancoProdutos";
//Conexao com Servlet
private GetPostRegistros conClientes;
private Thread t = null;
public VendaRemota(){
display = Display.getDisplay(this);
sair = new Command("Sair", Command.EXIT, 0);
voltar = new Command ("Voltar", Command.BACK, 0);
salvar = new Command( "Salvar", Command.OK, 1);
apagar = new Command("Apagar", Command.OK, 1);
novo = new Command("Novo", Command.OK, 1);
sobre = new Command ("Sobre", Command.HELP,1);
telaInicial = new List( "Pizzaria Pegaleve - Seja bem-vindo", Choice.IMPLICIT );
telaInicial.append("Clientes",null);
telaInicial.append("Produtos",null);
telaInicial.append("Pedidos",null);
telaInicial.append("Transmitir dados",null);
telaInicial.append("Zerar Registros",null);
telaInicial.append("Estatísticas",null);
telaInicial.addCommand(sair);
telaInicial.addCommand(sobre);
telaInicial.setCommandListener(this);
telaClientes = new List("Cadastro de Clientes", Choice.MULTIPLE);
telaClientes.addCommand(voltar);
telaClientes.addCommand(novo);
telaClientes.addCommand(apagar);
telaClientes.setCommandListener(this);
telaProdutos = new List("Cadastro de Produtos", Choice.MULTIPLE);
telaProdutos.addCommand(voltar);
telaProdutos.addCommand(novo);
telaProdutos.addCommand(apagar);
telaProdutos.setCommandListener(this);
telaPedidos = new List("Cadastro de Pedidos", Choice.MULTIPLE);
telaPedidos.addCommand(voltar);
telaPedidos.addCommand(novo);
telaPedidos.addCommand(apagar);
telaPedidos.setCommandListener(this);
adicionarCliente = new Form ("Adicione novo cliente");
tfCliente = new TextField ("Nome do Cliente","",20, TextField.ANY);
adicionarCliente.append(tfCliente);
tfEndereco = new TextField ("Endereço","",20, TextField.ANY);
adicionarCliente.append(tfEndereco);
tfTelefone = new TextField ("Telefone:","",9, TextField.ANY);
adicionarCliente.append(tfTelefone);
tfSenha = new TextField ("Senha:","",16, TextField.PASSWORD);
adicionarCliente.append(tfSenha);
tfLogin = new TextField ("Login:","",16, TextField.ANY);
adicionarCliente.append(tfLogin);
tfEmail = new TextField ("E-mail:","",20, TextField.ANY);
adicionarCliente.append(tfEmail);
adicionarCliente.addCommand(salvar);
adicionarCliente.addCommand(voltar);
adicionarCliente.setCommandListener(this);
adicionarProduto = new Form ("Adicione novo produto");
tfCodigo = new TextField ("Código:","",7, TextField.ANY);
tfProduto = new TextField ("Descrição","",20, TextField.ANY);
tfTam = new TextField ("Tamanho","",10, TextField.ANY);
tfPreco = new TextField ("Preco Unitario:","",7, TextField.ANY);
adicionarProduto.append(tfCodigo);
adicionarProduto.append(tfProduto);
adicionarProduto.append(tfTam);
adicionarProduto.append(tfPreco);
adicionarProduto.addCommand(salvar);
adicionarProduto.addCommand(voltar);
adicionarProduto.setCommandListener(this);
adicionarPedido = new Form ("Adicione novo pedido");
String[] strings = new String[] { "" };
clientesCG = new ChoiceGroup("Clientes cadastrados", ChoiceGroup.POPUP, strings, null);
produtosCG = new ChoiceGroup("Produtos cadastrados", ChoiceGroup.POPUP, strings, null);
tfQuantidade = new TextField("Quantidade","",3, TextField.NUMERIC);
adicionarPedido.append(clientesCG);
adicionarPedido.append(produtosCG);
adicionarPedido.append(tfQuantidade);
adicionarPedido.addCommand(salvar);
adicionarPedido.addCommand(voltar);
adicionarPedido.setCommandListener(this);
rmsPedidos = new RmsVenda();
rmsClientes = new RmsVenda();
rmsProdutos = new RmsVenda();
telaInformacoes = new Form ("Estatísticas do sistema");
telaInformacoes.addCommand(voltar);
telaInformacoes.setCommandListener(this);
}
public void startApp() {
display.setCurrent(telaInicial);
RSPedidos = rmsPedidos.abrirRecordStore(BDPedidos);
RSClientes = rmsClientes.abrirRecordStore(BDClientes);
RSProdutos = rmsProdutos.abrirRecordStore(BDProdutos);
vecClientes = rmsClientes.listarRegistros(RSClientes);
vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
vecPedidos = rmsPedidos.listarRegistros(RSPedidos);
}
public void gerenciarClientes(){
vecClientes = rmsClientes.listarRegistros(RSClientes);
gerarTela(vecClientes, telaClientes);
display.setCurrent(telaClientes);
}
public void gerenciarProdutos(){
vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
gerarTela(vecProdutos, telaProdutos);
display.setCurrent(telaProdutos);
}
public void gerenciarPedidos(){
vecPedidos = rmsPedidos.listarRegistros(RSPedidos);
gerarTela(vecPedidos, telaPedidos);
display.setCurrent(telaPedidos);
}
private void gerarTela(Vector vecNomes, List tela){
tela.deleteAll();
for (int i = 0; i < vecNomes.size(); i++) {
if (tela.getTitle()=="Cadastro de Clientes"){
Clientes item = (Clientes)vecNomes.elementAt(i);
String nome = item.getNome();
tela.append(nome, null);
}else if (tela.getTitle()=="Cadastro de Produtos"){
Produtos item = (Produtos)vecNomes.elementAt(i);
String nome = item.getNome();
float preco = item.getPreco();
tela.append(nome+" R$"+preco, null);
}else{
Pedidos item = (Pedidos)vecNomes.elementAt(i);
String cliente = item.getCliente();
String produto = item.getProduto();
int quantidade = item.getQuantidade();
tela.append(cliente+" "+produto+" "+quantidade, null);
}
}
testarComandoApagar(tela);
display.setCurrent(tela);
}
private void testarComandoApagar(List tela){
if ((tela.getString(0)).regionMatches(true, 8, "não cadastrados", 0, 15)){
Ticker ticker = new Ticker ("Nenhum registro encontrado neste cadastro");
tela.setTicker(ticker);
tela.removeCommand(apagar);
}else if ((tela.getString(0)).regionMatches(true, 9, "não cadastrados", 0, 15)){
Ticker ticker = new Ticker ("Nenhum registro encontrado neste cadastro");
tela.setTicker(ticker);
tela.removeCommand(apagar);
}else{
tela.addCommand(apagar);
tela.setTicker(null);
}
}
private void testarComandoSalvar(Displayable d){
if (d == adicionarCliente){
if (tfCliente.size() != 0){
gravacaoOK = true;
}
}else if (d == adicionarProduto){
if ((tfProduto.size() != 0) && (tfPreco.size() != 0)){
gravacaoOK = true;
}
}else if (d == adicionarPedido){
if ((clientesCG.getString(0)== "Clientes não cadastrados") || ((produtosCG.getString(0))=="Produtos não cadastrados") || (tfQuantidade.size()==0)) {
gravacaoOK = false;
}else
gravacaoOK=true;
}
}
public void pauseApp() { }
public void destroyApp(boolean unconditional) {
rmsPedidos.closeRecordStore(RSPedidos);
rmsClientes.closeRecordStore(RSClientes);
rmsProdutos.closeRecordStore(RSProdutos);
notifyDestroyed();
}
private void zerarRegistros(){
rmsClientes.zerarRegistros(RSClientes, "BancoClientes");
rmsProdutos.zerarRegistros(RSProdutos, "BancoProdutos");
rmsPedidos.zerarRegistros(RSPedidos, "BancoPedidos");
RSPedidos = rmsPedidos.abrirRecordStore(BDPedidos);
RSClientes = rmsClientes.abrirRecordStore(BDClientes);
RSProdutos = rmsProdutos.abrirRecordStore(BDProdutos);
vecProdutos.removeAllElements();
vecClientes.removeAllElements();
vecPedidos.removeAllElements();
vecClientes = rmsClientes.listarRegistros(RSClientes);
vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
vecPedidos = rmsPedidos.listarRegistros(RSPedidos);
mostrarAlerta("Registros zerados", "Bancos de dados apagados");
display.setCurrent(alerta, telaInicial);
}
private void mostrarInformacoes(RecordStore rs){
try{
String nomeRs = rs.getName();
String numero = Integer.toString(rs.getNumRecords());
String tamanho = Integer.toString(rs.getSize());
String disponivel = Integer.toString(rs.getSizeAvailable());
StringItem nomeSI = new StringItem ("Nome do RecordStore", nomeRs);
StringItem tamanhoOc = new StringItem ("Tamanho ocupado (em bytes)", tamanho.toString());
StringItem numeroReg = new StringItem ("Número de registros existentes", numero);
StringItem tamanhoDis = new StringItem ("Tamanho disponível (em bytes)", disponivel);
telaInformacoes.append(nomeSI);
telaInformacoes.append(tamanhoOc);
telaInformacoes.append(numeroReg);
telaInformacoes.append(tamanhoDis);
}
catch (Exception exc) {}
}
private void mostrarAlerta(String tipoAlerta, String msg){
alerta = new Alert(tipoAlerta, msg, null, AlertType.WARNING);
alerta.setTimeout(Alert.FOREVER);
}
public void commandAction(Command c, Displayable d){
if (c == List.SELECT_COMMAND){
String selection = telaInicial.getString(telaInicial.getSelectedIndex());
if (selection == "Clientes"){
gerenciarClientes();
}else if(selection == "Produtos"){
gerenciarProdutos();
}else if(selection == "Pedidos"){
gerenciarPedidos();
}else if(selection == "Zerar Registros"){
zerarRegistros();
}else if(selection == "Estatísticas"){
mostrarInformacoes(RSClientes);
mostrarInformacoes(RSProdutos);
mostrarInformacoes(RSPedidos);
display.setCurrent(telaInformacoes);
}else if (selection == "Transmitir dados"){
connectThreadClientes();
}
} else if (c==sair) {
destroyApp(true);
}else if (c == sobre) {
String m1 = ("Trabalho de Lab. de Engenharia de Software\n");
String m2 = ("Prof. Alexandre Heleno\n");
String m3 = ("Alunos:\n");
String m4 = ("Danielle Gomes\n");
String m5 = ("Hugo Gomes\n");
String m6 = ("Gustavo Henrique\n");
String m7 = ("Ramon Ferreira");
mostrarAlerta("Sobre",m1+m2+m3+m4+m5+m6+m7);
display.setCurrent(alerta, telaInicial);
}else if (c==novo){
if (d == telaClientes){
tfCliente.setString("");
display.setCurrent(adicionarCliente);
}else if (d == telaProdutos){
tfProduto.setString("");
tfPreco.setString("");
display.setCurrent(adicionarProduto);
}else if (d == telaPedidos){
tfQuantidade.setString("");
clientesCG.deleteAll();
produtosCG.deleteAll();
for (int i = 0; i < vecClientes.size(); i++) {
Clientes item = (Clientes)vecClientes.elementAt(i);
String nome = item.getNome();
clientesCG.append(nome, null);
}
for (int i = 0; i < vecProdutos.size(); i++) {
Produtos item = (Produtos)vecProdutos.elementAt(i);
String nome = item.getNome();
produtosCG.append(nome, null);
}
display.setCurrent(adicionarPedido);
}
}else if (c==salvar) {
testarComandoSalvar(display.getCurrent());
if (gravacaoOK == false){
mostrarAlerta("Aviso", "Registro vazio não será salvo\n"+"Tente novamente");
display.setCurrent(alerta, display.getCurrent());
}else {
if (d == adicionarCliente){
rmsClientes.adicionarRegistroClientes(RSClientes, tfCliente.getString());
vecClientes = rmsClientes.listarRegistros(RSClientes);
tfCliente.setString("");
}else if (d == adicionarProduto){
rmsProdutos.adicionarRegistroProdutos(RSProdutos, tfProduto.getString(), Float.parseFloat(tfPreco.getString()));
vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
tfProduto.setString("");
tfPreco.setString("");
}else if (d == adicionarPedido){
rmsPedidos.adicionarRegistroPedido(RSPedidos, clientesCG.getString(clientesCG.getSelectedIndex()), produtosCG.getString(produtosCG.getSelectedIndex()), Integer.parseInt(tfQuantidade.getString()));
vecPedidos = rmsPedidos.listarRegistros(RSPedidos);
tfQuantidade.setString("");
}
gravacaoOK=false;
display.setCurrent(telaInicial);
}
}else if (c==apagar){
if (d == telaClientes){
deletedFlags = new boolean[telaClientes.size()];
telaClientes.getSelectedFlags(deletedFlags);
rmsClientes.apagarRegistros(RSClientes, vecClientes, deletedFlags);
vecClientes = rmsClientes.listarRegistros(RSClientes);
}else if (d == telaProdutos){
deletedFlags = new boolean[telaProdutos.size()];
telaProdutos.getSelectedFlags(deletedFlags);
rmsProdutos.apagarRegistros(RSProdutos, vecProdutos, deletedFlags);
vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
}else if (d == telaPedidos){
deletedFlags = new boolean[telaPedidos.size()];
telaPedidos.getSelectedFlags(deletedFlags);
rmsPedidos.apagarRegistros(RSPedidos, vecPedidos, deletedFlags);
vecPedidos = rmsPedidos.listarRegistros(RSPedidos);
}
display.setCurrent(telaInicial);
}else if (c==voltar){
if (d == adicionarPedido){
display.setCurrent(telaPedidos);
}else{
display.setCurrent(telaInicial);
}
}
}
private void connectThreadClientes(){
t = new Thread(this);
t.start();
}
public void run(){
try{
conectarEnviarPedidos();
}catch (Exception e){}
}
private void conectarEnviarPedidos(){
String url_servidor ="http://localhost:8080/VendaRemotaServlet/RecebePedidos";
conClientes = new GetPostRegistros(url_servidor);
String mensagem;
try{
mensagem = conClientes.enviarRegistros(vecPedidos);
if (mensagem == null){
mensagem = "Erro de comunicação com o servlet";
}
mostrarAlerta("Resposta do Servlet", mensagem);
display.setCurrent(alerta, telaInicial);
}catch (Exception e){}
display.setCurrent(telaInicial);
}
}
erro:
Running with storage root C:\Users\Ferreira\j2mewtk\2.5.2\appdb\temp.DefaultColorPhone78
Running with locale: Portuguese_Brazil.1252
Running in the identified_third_party security domain
java.lang.IndexOutOfBoundsException
at javax.microedition.lcdui.ChoiceGroup.checkIndex(+19)
at javax.microedition.lcdui.ChoiceGroup.getString(+11)
at javax.microedition.lcdui.List.getString(+8)
at principal.VendaRemota.testarComandoApagar(+5)
at principal.VendaRemota.gerarTela(+204)
at principal.VendaRemota.gerenciarClientes(+27)
at principal.VendaRemota.commandAction(+32)
at javax.microedition.lcdui.List.callKeyPressed(+80)
at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+198)
at javax.microedition.lcdui.Display$DisplayManagerImpl.keyEvent(+11)
at com.sun.midp.lcdui.DefaultEventHandler.keyEvent(+127)
at com.sun.midp.lcdui.AutomatedEventHandler.keyEvent(+210)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+114)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)