Bom dia, pessoal!
Essa é a primeira vez que posto no fórum, apesar de fazer um tempo que leio os tópicos referentes ao Java2ME. Estou com um problema em uma aplicação e não consigo de maneira alguma resolvê-lo, gostaria de uma ajuda de vocês…
Estou usando CLDC 1.1 e MIDP 2.0; escrevo os códigos em um editor de texto e compilo e rodo no Sun Wireless Tollkit 2.5.2_01. O WebService que eu uso foi feito em .net.
Seguinte, no startApp() eu verifico se o MIDlet já possui algum RMS no dispositivo; se possuir fazemos tudo que temos que fazer com os dados dos bancos. Se não possuir vamos pra um formulário de login, onde o cara entra com seu usuário e senha. Quando ele dá OK validamos seus dados via WebService (que retorna T ou F, para true ou false), e, caso sejam válidos, vamos pra uma splash screen e iniciamos uma thread.
A thread se conecta ao WebService para baixar e criar dois bancos, um como usuário e senha (para as próximas vezes que o cara entrar no aplicativo) e o outro com usuário e linha (linha de ônibus, porque essa aplicação é para os fiscais de uma cooperativa de transporte). O primeiro banco ele cria sem problemas; quando eu saio da aplicação e volto me logo por ele, não mais pelo WebService. O problema está no segundo banco.
No WTK ele faz tudo que eu peço pra ele fazer, mas no celular (um Motorola i560, velhão mesmo) ele dá um erro genérico (“Exceção ñ resolveu”). Os bancos são pequenos e tem espaço no aparelho, e o WebService está funcionando. Realmente não sei o que pode ser.
O código é o seguinte:
// retorna a quantidade de registros que o select traz
public void pegaQtdRegistrosLinha() {
String url = "http://182.41.287.14/Consulta.asmx/Consulta?RETORNO=B";
try {
conHTTP = (HttpConnection)Connector.open(url);
if (conHTTP.getResponseCode() == HttpConnection.HTTP_OK) {
inputStream = conHTTP.openInputStream();
StringBuffer stringBuffer = new StringBuffer();
// qtdSeparador é a variável que guarda a quantidade de registros
int qtdSeparador = 0;
int caractere_Lido = inputStream.read();
while (caractere_Lido != '%') {
if (caractere_Lido == ';') {
qtdSeparador = qtdSeparador + 1;
caractere_Lido = inputStream.read();
}
else {
qtdSeparador = qtdSeparador;
caractere_Lido = inputStream.read();
}
}
qtdLinhas = qtdSeparador;
carregaBancoLinha();
}
else {
Erro = "Erro 1";
}
}
catch (IOException ex) {
Erro = "Erro 2 - " + ex.toString();
}
catch (SecurityException ex) {
Erro = "Erro 3 - " + ex.toString();
}
catch (Exception ex) {
Erro = "Erro 4 - " + ex.toString();
}
}
// carrega um Vector com o resultado de select
public void carregaBancoLinha() {
String url = "http://182.41.287.14/Consulta.asmx/Consulta?RETORNO=B";
try {
vetorDados = new Vector();
String[] dados;
conHTTP = (HttpConnection)Connector.open(url);
if (conHTTP.getResponseCode() == HttpConnection.HTTP_OK) {
inputStream = conHTTP.openInputStream();
StringBuffer stringBuffer = new StringBuffer();
int caractere_Lido = inputStream.read();
while (caractere_Lido != '%') {
dados = new String[qtdLinhas];
for (int i = 0; i < dados.length; i++) {
while (caractere_Lido != ';') {
stringBuffer.append((char)caractere_Lido);
caractere_Lido = inputStream.read();
}
dados[i] = stringBuffer.toString();
stringBuffer.delete(0, stringBuffer.length());
caractere_Lido = inputStream.read();
vetorDados.addElement(dados[i]);
}
}
recebeDadosLinha(vetorDados);
}
else {
Erro = "Erro 5";
}
}
catch (IOException ex) {
Erro = "Erro 6 - " + ex.toString();
}
catch (SecurityException ex) {
Erro = "Erro 7 - " + ex.toString();
}
catch (Exception ex) {
Erro = "Erro 8 - " + ex.toString();
}
}
public void recebeDadosLinha(Vector vetorDados) {
vetorDados = vetorDados;
int tamanho = vetorDados.size();
try {
rms_Linha = RecordStore.openRecordStore("linha", true);
for (int i = 0; i < tamanho; i++) {
String dados = (String)vetorDados.elementAt(i);
byte[] outputRecord = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DataOutputStream outputDataStream = new DataOutputStream(outputStream);
outputDataStream.writeUTF(dados);
outputRecord = outputStream.toByteArray();
rms_Linha.addRecord(outputRecord, 0, outputRecord.length);
outputStream.reset();
outputStream.close();
outputDataStream.close();
}
rms_Linha.closeRecordStore();
}
catch (InvalidRecordIDException ex) {
Erro = "Erro 9 - " + ex.toString();
}
catch (RecordStoreFullException ex) {
Erro = "Erro 10 - " + ex.toString();
}
catch (RecordStoreNotFoundException ex) {
Erro = "Erro 11 - " + ex.toString();
}
catch (RecordStoreNotOpenException ex) {
Erro = "Erro 12 - " + ex.toString();
}
catch (Exception ex) {
Erro = "Erro 13 - " + ex.toString();
}
}
A string que retorna do WebService é parecida com essa: “123 !1018/10;123 !938V22;123 !L336699;321 !00003;321 !1771;%”.
Esse é o primeiro projeto que faço em Java2ME (e também é a primeira vez que uso Java, até então só trabalhava com c#), então desculpem qualquer besteira enorme que eu tenha escrito!
Obrigada desde já.