Problema com DataInputStream

Caros colegas, sou novo aqui neste forum, porém as duvidas são muitas:

estou desenvolvendo uma aplicação que recebe os dados do Servlet e grava em um RMS, porém ao receber os dados do Servlet com o DataInputStream aparece que ele recebe somente uma quantidade limitada de dados, neste caso ele nao esta fazendo toda a leitura dos dados recebidos do servlet, abaixo esta o servlet e o meu Midlet

Minha classe j2me Thread que faz a conexao e recebe os dados so Servlet

[code]import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;

public class DownloadAtualizacao implements Runnable {
private String dados1;
private String url;

private InputStream inStr;

private InputStream iStrm;
private HttpConnection http;

public String getDados1() {
	return dados1;
}

public void setDados1(String dados1) {
	this.dados1 = dados1;
}

public DownloadAtualizacao(String endereco) {
	this.url = endereco;
}

public void conectar() throws IOException {

	http = (HttpConnection) Connector.open(url);
	System.out.println("conexao aberta");
	http.setRequestMethod(HttpConnection.GET);
	iStrm = http.openInputStream();
	DataInputStream dt = new DataInputStream(inStr);
	System.out.println("mostrando dados");
	int length = (int) http.getLength();
	String str;
	if (length != -1) {
		byte servletData[] = new byte[length];
		iStrm.read(servletData);
		str = new String(servletData);
		System.out.println("dados: " + str);
		System.out.println(dt.readUTF());
	} else {
		System.out.println(length);
		System.out.println(dt.readUTF());
	}
}

public void run() {

	try {
		this.conectar();
	} catch (IOException e) {

		e.printStackTrace();
	}
}

public final static String[] split(String texto) {
	char separador = '|';
	if (texto == null) {

		return null;

	}

	int tamanhoTexto = texto.length();

	if (tamanhoTexto == 0) {

		return null;

	}

	Vector lista = new Vector();

	int i = 0;

	int start = 0;

	boolean permite = false;

	while (i < tamanhoTexto) {

		// percorre caracter a caracter tentando encontrar o separador

		// se encontrar o separador no primeiro carcater ele ignora

		if (texto.charAt(i) == separador) {

			if (permite) {

				// pegando o pedaço da string entre os separadores

				lista.addElement(texto.substring(start, i).trim());

				permite = false;

			}

			// recebo a posição de onde posso começar a pegar os caracteres,

			// até a próxima vez que encontrar o separador ou terminar os
			// caracteres

			start = ++i;

			continue;

		}

		permite = true;

		i++;

	}

	if (permite) {

		// guardando a informação em uma posição da lista

		lista.addElement(texto.substring(start, i).trim());

	}

	// convertendo o vetor em arrray

	String[] listaElementos = new String[lista.size()];

	lista.copyInto(listaElementos);

	return listaElementos;

}

}
[/code]

Meu Servlet que filtra os dados do bd e exibe no browser:

[code]package br.com.cooper;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ExibeJson extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = -3625526568409716004L;

public ExibeJson() {

}

protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {

	String s;
	Campos campos = new Campos();
	ConectaBd con = new ConectaBd();
	con.Conecta();

	String SQL = "select * from fp02t3 where fp02situ='A' and fp02funcao LIKE 'MOTORISTA - CAMINHAO%' order by fp02nom";
	con.executaSQL(SQL);
	String comando = request.getParameter("comando");

	if (comando.equals("AtualizaMotorista")) {

		response.setContentType("text/plain");
		PrintWriter out = response.getWriter();
		try {
			while (con.resultset.next()) {
				campos.setCodigo(con.resultset.getString("fp02cod"));
				campos.setNome(con.resultset.getString("fp02nom"));
				s = campos.getCodigo() + "|" + campos.getNome() + "|";
				// out.print(s);
				out.println(s);
				System.out.println(s);

			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out
					.println("ERRO: ArrayIndexOutOfBoundsException: " + e);
		} finally {
			out.close();
		}

	}
}

}
[/code]

PRECISO URGENTE DE UMA AJUDA …

pois o midlet somente lista a metade dos dados que se encontra na tabela, e o Servlet exibe todos eles na tela.

o que pode estar acontecendo?
será que a String que recebe DataInputStream tem limites de caracteres?

ME AJUDEMMM PELO AMOR DE DEUUSS!!

Para ler os dados com readUTF eles precisam ser gravados com writeUTF.
Você disse que lê uma certa quantidade. Tem certeza? Pois parece que não está lendo nada.

DataInputStream dt = new DataInputStream(inStr); System.out.println("mostrando dados"); int length = (int) http.getLength(); String str; byte servletData[] = new byte[length]; iStrm.read(servletData); //Você usa iStrm.read(servletData) sem armazenar o resultado numa variável para exibir depois. str = new String(servletData); // como servletData[] = new byte[length]; str é apenas byte[length] não os dados lidos System.out.println("dados: " + str); //aqui só vai exibir o tamanho da stream: byte[length] System.out.println(dt.readUTF()); //o DataInputStream está armazenado em "dt" que você usa para ler com readUTF() que não foi gravado com writeUTF
Acredito que você deva fazer um loop para ler os caracteres de “dt” um a um e montar o resultado. ou então tenta isto:

        int length = (int) http.getLength();   
        String str;   
            byte servletData[] = new byte[length];   
            iStrm.read(servletData);// deleta esta linha   
            //str = new String(servletData); //muda esta linha para:
            str = new String(iStrm.read(servletData));
            System.out.println("dados: " + str);   
            System.out.println(dt.readUTF()); 

Se der certo, posta pra gente.

edwagner obrigado pela sua ajuda!
mais consegui resolver de outra maneira aqui!

após muitas horas quebrando a cabeça com codigos e testes, consegui terminar meu midlet e fazer receber os dados do servlet…

segue abaixo o codigo do servlet e do midlet!

[code]import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;

import net.sourceforge.floggy.persistence.FloggyException;
import net.sourceforge.floggy.persistence.PersistableManager;

public class DownloadAtualizacao implements Runnable {

private String url;

private HttpConnection http;
private StringBuffer sb;

public DownloadAtualizacao(String endereco) {
	this.url = endereco;
}

public void conectar() throws IOException {

	http = (HttpConnection) Connector.open(url);

	System.out.println("conexao aberta");

	InputStream is = (DataInputStream) http.openDataInputStream();
	int ch;
	sb = new StringBuffer();
	while ((ch = is.read()) != -1) {
		sb.append((char) ch);
	}
	String valores = sb.toString();
	String dados[] = split(valores);
	
		
	for (int i = 0; i < dados.length; i++) {
		PersistenciaGeral p = new PersistenciaGeral();
		p.setCodigo(dados[i]);
		p.setDadosGeral(dados[i + 1]);
		p.salvar();
		i += 1;
		System.out.println(p.getDadosGeral());
	}

}

public void run() {

	try {
		this.conectar();
	} catch (IOException e) {

		e.printStackTrace();
	}
}

public final static String[] split(String texto) {
	char separador = '|';
	if (texto == null) {

		return null;

	}

	int tamanhoTexto = texto.length();

	if (tamanhoTexto == 0) {

		return null;

	}

	Vector lista = new Vector();

	int i = 0;

	int start = 0;

	boolean permite = false;

	while (i < tamanhoTexto) {

		// percorre caracter a caracter tentando encontrar o separador

		// se encontrar o separador no primeiro carcater ele ignora

		if (texto.charAt(i) == separador) {

			if (permite) {

				// pegando o pedaço da string entre os separadores

				lista.addElement(texto.substring(start, i).trim());

				permite = false;

			}

			// recebo a posição de onde posso começar a pegar os caracteres,

			// até a próxima vez que encontrar o separador ou terminar os
			// caracteres

			start = ++i;

			continue;

		}

		permite = true;

		i++;

	}

	if (permite) {

		// guardando a informação em uma posição da lista

		lista.addElement(texto.substring(start, i).trim());

	}

	// convertendo o vetor em arrray

	String[] listaElementos = new String[lista.size()];

	lista.copyInto(listaElementos);

	return listaElementos;

}

}
[/code]

Servlet:

[code]package br.com.cooper;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ExibeJson extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = -3625526568409716004L;

public ExibeJson() {

}

protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {

	
	String s;
	Campos campos = new Campos();
	ConectaBd con = new ConectaBd();
	con.Conecta();

	String SQL = "select * from fp02t3 where fp02situ='A'and pe01codemp=02 and fp02funcao = 'MOTORISTA - CAMINHAO' order by fp02nom";
	con.executaSQL(SQL);
	String comando = request.getParameter("comando");

	if (comando.equals("AtualizaMotorista")) {

		response.setContentType("text/plain;charset=UTF-8");
		PrintWriter out = response.getWriter();

		try {
			while (con.resultset.next()) {

				campos.setCodigo(con.resultset.getString("fp02cod"));
				campos.setNome(con.resultset.getString("fp02nom"));
				s = String.valueOf(campos.getCodigo() + "|"
						+ campos.getNome() + "|");
				out.print(s+"\n");
				System.out.print(s);

			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out
					.println("ERRO: ArrayIndexOutOfBoundsException: " + e);
		} finally {
			out.close();
		}

	}
}

}
[/code]

Valewsss pela ajuda, e espero também contribuir muito para o aprendizado de todos neste Forum! Tanks

[quote=edwagner]Acredito que você deva fazer um loop para ler os caracteres de “dt” um a um e montar o resultado.
[/quote]

Foi isto que eu te diise, seu código estava errado e o loop que te falei é este aqui que você usou:

InputStream is = (DataInputStream) http.openDataInputStream();   
int ch;   
sb = new StringBuffer();   
while ((ch = is.read()) != -1) {   
            sb.append((char) ch);   
       }   

Muito bom ter dado certo, um abraço,