Pegar dados de uma página html

11 respostas
G
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:
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;
	}
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

11 Respostas

G

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

G

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

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

L

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.

G

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

Jaison

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

da algum erro no console?

G

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

Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.

por isso penso que é algo relacionado a uma configuração de segurança, sei lá
abrass

Jaison

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

Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.

por isso penso que é algo relacionado a uma configuração de segurança, sei lá
abrass

vc tem que implementar Thread

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

G
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
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;
    }
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:
G

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

G
// 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;
	}
jorgecardoso

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

Criado 5 de dezembro de 2007
Ultima resposta 13 de dez. de 2007
Respostas 11
Participantes 4