Pegar dados de uma página html

Pessoal, primeiramente este é o código (em html) exemplo da página:

Cidade: Guaramirim <br> 110 km <br> 2h5min

então
atraves de uma httpConnection quero pegar a quilometragem (110 km) e o tempo (2h5min), meu código é o seguinte:

[code]public void pegar_rota() {
try {
String destino = jtfdestino.getString();

                    //Chama o Método de Retirada de espaços da string, adicionando o %20 no lugar dos espaços para poder ser adicionado na URL
		destino = replaceAll(destino," ", "%20");
		//Cria a URL da rota
		url = "http://localhost:8084/projetojspguilherme/pesquisar?destino="+destino;
		System.out.println(url);
		// Inicia a Conexão HTTP
		HttpConnection conn =(HttpConnection) Connector.open(url);
		// Seta o Método de POST na Conexão
		conn.setRequestMethod(HttpConnection.POST);
		// Seta as Propriedados do Request Feito Pela Conexão
		conn.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");
		conn.setRequestProperty("Content-Language", "en-US");
		conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		// Abre uma Nova InputStream, para serem pegos os dados
		InputStream is = conn.openInputStream ();
		boolean ret = false;
		// Processa a Resposta do Servidor
		ret = processServerResponse(conn, is);
		// Fexa a Conexão
		conn.close ();
	}
	catch (Exception e){
		System.out.println(e);

	}
}

private boolean processServerResponse(HttpConnection conn, InputStream is) throws IOException {
	{
		//Reset error message
		String errorMsg = null;

		// 1) Get status Line
		if (conn.getResponseCode() == HttpConnection.HTTP_OK)
		{ 
			// 3) Get body (data)
			int length = (int) conn.getLength();
			String str;
			if (length != -1)
			{
				byte servletData[] = new byte[length];
				is.read(servletData);
				str = new String(servletData);
			}
			else  // Length not available...
			{
				ByteArrayOutputStream bStrm = new ByteArrayOutputStream();

				int ch;
				while ((ch = is.read()) != -1)
					bStrm.write(ch);

				
                                    str = new String(bStrm.toByteArray());
				bStrm.close();
				// Seleciona onde fica o fim da palavra no código HTML
				int fimdist = str.indexOf("<br>");
				// Corta a parte do fim que não interessa
				String restodist = str.substring(0, fimdist);
				//Busca Pelos Caracteres que ficam antes da tradução
				int iniciodist = restodist.indexOf("<br>");
				//Recorta Somente a quilometragem
				quilometragem = restodist.substring(iniciodist+27);

			}

			// Update the string item on the display
			return true;
		}
		else
			// Use message from the servlet
			errorMsg = new String( conn.getResponseMessage());
	}
	return false; 
}


// Método de Replace ALL, que não existe no J2ME
public static String replaceAll(String FraseComEspaco, String Espaco,String SemEspaco){ 
	int from = 0; 
	StringBuffer sb = new StringBuffer();
	int index = -1; 
	while(true){
		index = FraseComEspaco.indexOf(Espaco,from); 
		if(index!=-1){ 
			sb = new StringBuffer(); 
			String upto = FraseComEspaco.substring(0,index); 
			sb.append(upto+SemEspaco); 
			String lastbit = FraseComEspaco.substring(index+Espaco.length(),FraseComEspaco.length());
			sb.append(lastbit); FraseComEspaco = sb.toString();
			from = index+Espaco.length(); 
		} 
		else{
			break; 
		}
	} 
	return FraseComEspaco;
}

[/code]
a critério de teste estou pegando somente a quilometragem
quero exibir a var quilometragem dentro de uma StringItem num form chama resposta
como fasso?
abração

ow pessoal
a duvida é relativamente simples
exibir a variável “quilometragem” dentro de uma StringItem que está dentro do Form “resposta”
:!: :!:

[quote]ow pessoal
a duvida é relativamente simples
exibir a variável “quilometragem” dentro de uma StringItem que está dentro do Form “resposta”
[/quote]
CORRIGINDO-ME
Fazer o valor da variável aparecer no StringItem é patéticamente fácil

public StringItem get_string_distancia() { if (string_distancia == null) { string_distancia = new StringItem("", quilometragem); } return string_distancia; }

a questão agora é:

:!: :!:open_mouth: QUE ESTÁ ERRADO NA CONEXÃO? :!: :!:
pois se atribuo um valor “X” para a var ela exibi
o erro está na conexão
ajudaaa

cara eu não saquei direto sua lógica, mas eu acho que eh por que vc fecha a conexão na linha 24 e depois vc requere ela de novo, soh que ela esta fechada.

Pessoal
To desenvolvendo em NetBeans 5.5
ao inserir o vaor da variavel destino
ele exibe o seguinte form
[URL=http://img134.imageshack.us/my.php?image=connectionsy2.png][/URL]
não me retornando resposta nenhuma
alguem teria alguma ideia de como resolver isso?
penso eu que é algo relacionado a configuração.
abrass

por curiosidade vc está usando Thread na sua conexão?

da algum erro no console?

Ae é que tá Jaison
ele num me traz nenhum erro
aparece do display do emulador aquela msg
e no console aparece isso:

[quote]Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
[/quote]
por isso penso que é algo relacionado a uma configuração de segurança, sei lá
abrass

[quote=guigavieira]Ae é que tá Jaison
ele num me traz nenhum erro
aparece do display do emulador aquela msg
e no console aparece isso:

[quote]Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
[/quote]
por isso penso que é algo relacionado a uma configuração de segurança, sei lá
abrass[/quote]

vc tem que implementar Thread

da uma olhada nesse outro tópico http://www.guj.com.br/posts/list/75968.java;jsessionid=9E459CF7D6F0382FB99190F3BCFC5D8E

povo
minha aplicação tá conectando, pois o netBeans chama a aba http Monitor, que só aparece quando há uma conexão
o código da página que quer obter dados é esse:

Cidade Origem: <i>Jaragua do Sul</i> <br> Cidade Destino: <i>Joinville</i> <br> <b>48km<b> <br> <b>48min<b>

no meu código, a seguir, peço somente a quilometragem (48km), mas a variável quilometragem retorna null

[code] public class Conecta extends Thread{

        HttpConnection connection = null;   
        InputStream is = null;   
        OutputStream os = null;   
        StringBuffer stringBuffer = new StringBuffer();   
        StringItem stresposta = null;

           
        public void run(){   
            try {
              url = "http://localhost:8084/JSP_Guilherme_Eduardo/pesquisar?destino="+destino+"&origem="+origem;";
              connection = (HttpConnection)Connector.open(url);   
              connection.setRequestMethod(HttpConnection.GET);   
              connection.setRequestProperty("IF-Modified-Since","20 Jan 2001 16:19:14 GMT");   
              connection.setRequestProperty("User-Agent","Profile/MIDP-2.0 Confirguration/CLDC-1.0");   
              connection.setRequestProperty("Content-Language", "en-CA");   
              connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");   
                   
              os = connection.openOutputStream();   
              is = connection.openDataInputStream();   
               boolean ret = false;   
        // Processa a Resposta do Servidor   
        ret = processServerResponse(connection, is);   
        // Fexa a Conexão   
        connection.close ();   
    }   
    catch (Exception e){   
        System.out.println(e);   

    }   
}   
}
private boolean processServerResponse(HttpConnection conn, InputStream is) throws IOException {   
       
        //Reset error message   
        String errorMsg = null;   

        // 1) Get status Line   
        if (conn.getResponseCode() == HttpConnection.HTTP_OK)   
        {   
            // 3) Get body (data)   
            int length = (int) conn.getLength();   
            String str;   
            if (length != -1)   
            {   
                byte servletData[] = new byte[length];   
                is.read(servletData);   
                str = new String(servletData);   
            }   
            else  // Length not available...   
            {   
                ByteArrayOutputStream bStrm = new ByteArrayOutputStream();   

                int ch;   
                while ((ch = is.read()) != -1)   
                    bStrm.write(ch);   

                   
                                    str = new String(bStrm.toByteArray());   
                bStrm.close();   
                // Seleciona onde fica o fim da palavra no código HTML   
                int fimdist = str.indexOf("<b><br>");   
                // Corta a parte do fim que não interessa   
                String restodist = str.substring(0, fimdist);   
                //Busca Pelos Caracteres que ficam antes da tradução   
                int iniciodist = restodist.indexOf("<br><b>");   
                //Recorta Somente a quilometragem   
                quilometragem = restodist.substring(iniciodist+27);   

            }   
            // Update the string item on the display   
            return true;   
        }   
        else   {
            // Use message from the servlet   
            errorMsg = new String( conn.getResponseMessage());   
    }
    return false;
}

[/code]
lembrando que origem e destino são Strings lidas em textfields em um formulario anterior
alguma ideia, ou oq estou fazendo de errado?
obrigadão :wink:

pessoal
ainda não consigo pegar os dados
num me reotrna nada
agora quando solicito a conexão com o meu aplicativo me retorna isso no console:

javax.microedition.io.ConnectionNotFoundException: TCP open

???
conexão não encontrada?
mas
tcp aberta?
ajudem-me
por favor

[code]
// método que efetua a conexão
public void run() {
// Faz uso do método replaceall para que as variáveis destino e origem possam ser usadas na url
destino = replaceAll(destino," “, “%20”);
origem = replaceAll(origem,” ", “%20”);

    //Define a url para a conexão 
    url ="http://localhost:8080/JSP_Guilherme_Eduardo/pesquisar?destino="+destino+"&origem="+origem;
    
    StreamConnection SC = null;  //Cria uma nova StreamConnection
    InputStream IS = null;  //Cria uma nova InputStream
    StringBuffer SB = new StringBuffer();  //Cria uma nova StringBuffer
    
    try {
        SC = (StreamConnection)Connector.open(url); //Faz a conexão com a url
        IS = SC.openInputStream(); //Abre a entrada de dados para o celular
        int ch;
        while((ch = IS.read()) != -1) { //Enquanto o valor de ch for diferente de -1
              SB.append((char) ch); // Adiciona um char ao StringBuffer e altera o valor de ch
        }     
        conteudo=SB.toString();//converte a StringBuffer em String e adiciona na variável conteúdo
        if(IS != null) { // Se a entrada de dados estiver aberta
              IS.close(); // Fecha a entrada de dados
        }
        if(SC != null) { // Se a conexão estiver aberta
             SC.close(); //Fecha a conexão
        }        
  } catch (Exception exc) { //Se não for possível conectar
        System.out.println("Exception " + exc); // Exibe o erro no console
    }
    corte(); // chama o metodo corte
}       

// método que efetua o corte da variavel conteudo e mostra na tela o conteudo util
public void corte(){
int index,lastindex; // cria as variáveis do tipo int index e lastindex para a contagem dos caracteres

    index=conteudo.indexOf("<b>"); // atribui que index ira começar a partir do <b> do código html
    index=index+3; // index recebe 3 para pular <b>
    lastindex=conteudo.indexOf("<b>",index);// define lastindex(fim do trecho) como o proximo <b> a partir do anterior(index)
    lastindex=lastindex+4; // o fim da string recebe mais 4 caracteres (pula <br>) 
    str_km.setText(conteudo.substring(index, lastindex-4));// seta no StringItem o conteudo entre index e lastindex e diminui 4 do lastindex pra iniciar para o outro trecho da String
    index=conteudo.indexOf("<b>",lastindex); // define o index como o proximo <b> depois de lastindex
    index=index+3; //index recebe 3 pra pular <b>
    lastindex=conteudo.indexOf("<b>",index);// define lastindex como o proximo <b> depois do index
    str_tempo.setText(conteudo.substring(index, lastindex)); //seta no String item o conteudo entre index e lastindex
}   

// Método de Replace ALL
public static String replaceAll(String FraseComEspaco, String Espaco,String SemEspaco){ 
	int from = 0; 
	StringBuffer sb = new StringBuffer();
	int index = -1; 
	while(true){
		index = FraseComEspaco.indexOf(Espaco,from); 
		if(index!=-1){ 
			sb = new StringBuffer(); 
			String upto = FraseComEspaco.substring(0,index); 
			sb.append(upto+SemEspaco); 
			String lastbit = FraseComEspaco.substring(index+Espaco.length(),FraseComEspaco.length());
			sb.append(lastbit); FraseComEspaco = sb.toString();
			from = index+Espaco.length(); 
		} 
		else{
			break; 
		}
	} 
	return FraseComEspaco;
}[/code]

Oi,

Veja o código do exemplo 9.2 da minha página: http://livromidp.jorgecardoso.eu/codigofonte.php.

O exemplo faz algo parecido com o que quer.

jorge