WebService + gravando registros em RMS

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á.

Ah… Quando eu peço pra ele só chamar o primeiro método (pegaQtdRegistrosLinha()) ele não dá problemas, mas quando chamo o carregaBancoLinha() ele mostra a mensagem de erro padrão do celular (o que é pior é que no WTK tudo funciona perfeitamente!).