Web Service Via HTTP

Não tem nada a ver com seu problema, é só uma observação ‘respostaRetornada’ é uma string assim como 'resposta’
Neste caso vc pode eliminar uma das duas.

String respostaRetornada = null; Log.i("Logar", "Vai entrar no try"); try { respostaRetornada = ConexaoHttpClient.executaHttpPost(urlPost, parametrosPost); //respostaRetornada = ConexaoHttpClient.executaHttpGet(urlGet); String resposta = respostaRetornada.toString();

Alguma ideia de como possa resolver?
Eu poderia lhe enviar o projeto para analisar?

Obrigado e abraço!

[quote=tgcmv]Não tem nada a ver com seu problema, é só uma observação ‘respostaRetornada’ é uma string assim como 'resposta’
Neste caso vc pode eliminar uma das duas.

String respostaRetornada = null; Log.i("Logar", "Vai entrar no try"); try { respostaRetornada = ConexaoHttpClient.executaHttpPost(urlPost, parametrosPost); //respostaRetornada = ConexaoHttpClient.executaHttpGet(urlGet); String resposta = respostaRetornada.toString();
[/quote]

Já tinha feito isso, eu percebi esse “erro” :slight_smile:

Obrigado!

não acho que seja necessário enviar o projeto

olhando para o seu PHP eu vi o seguinte:

if (mysql_num_rows($resultado) > 0) {   
echo "1";   
} else {   
echo 0;   
}   

tenta tirar as aspas do echo e ve o que acontece, mais ou menos assim:

if (mysql_num_rows($resultado) > 0) {   
echo 1;   
} else {   
echo 0;   
}   

Obrigado mais uma vez!

Ainda não funcionou, infelizmente.
Vou atualizar o código, pois acho que até me perdi já.

Segue abaixo:

PHP

[code]<?php

//Chama a conexão do Banco de Dados.
require_once ‘Conexao.Class.php’;

//Chamada de parâmetros via GET
//$usuario = $_GET[‘nm_login’];
//$senha = $_GET[‘ds_senha’];

$usuario = $_POST[‘nm_login’];
$senha = $_POST[‘ds_senha’];

$sql = “SELECT * FROM TB_LOGIN WHERE nm_login = ‘$usuario’ AND ds_senha = ‘$senha’”;

$resultado = mysql_query($sql) or die("Erro: ".mysql_error());

if (mysql_num_rows($resultado) > 0) {
echo 1;
} else {
echo 0;
}

?>[/code]

JAVA

[code]package br.com.videoaulasneri.conexaoweb;

import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import br.com.videoaulasneri.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Logar extends Activity {
EditText etUsuario, etSenha;
Button btAcessar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logar);

    etUsuario=(EditText) findViewById(R.id.editUsuario);
    etSenha=(EditText) findViewById(R.id.editSenha);
    btAcessar=(Button) findViewById(R.id.btAcessar);
    
    btAcessar.setOnClickListener(new View.OnClickListener() {
		
		public void onClick(View v) {
			Log.i("logar", "entrou no evento");
			String urlPost="http://10.0.2.2/projeto/ValidaUsuario.php";
			//String urlGet="http://10.0.2.2/projeto/ValidaUsuario.php?nm_login="+etUsuario.getText().toString()+"&ds_senha="+etSenha.getText().toString();
			ArrayList<NameValuePair> parametrosPost = new ArrayList<NameValuePair>();
			parametrosPost.add(new BasicNameValuePair("nm_login",etUsuario.getText().toString()));
			parametrosPost.add(new BasicNameValuePair("ds_senha",etSenha.getText().toString()));
			String respostaRetornada = null;
			Log.i("logar", "vai entrar no try");
			try {
				respostaRetornada = ConexaoHttpClient.executaHttpPost(urlPost, parametrosPost);
				//respostaRetornada = ConexaoHttpClient.executaHttpGet(urlGet);
				String resposta = respostaRetornada.toString();
				Log.i("Logar", "Resposta = [" + resposta + "]");
				resposta = resposta.replaceAll("\\s+", "");
				System.out.println(resposta.length());
				for (int i = 0; i < resposta.length(); i++) {
					System.out.println((int)resposta.charAt(0));
				}
				/*int codResposta = -1;
				try {
					codResposta = Integer.parseInt(resposta);
				} catch (NumberFormatException nfe) {
					Log.w("Logar", "Erro ao tentar converter para número: "+nfe);
				}*/
				if (resposta == "1")
					//startActivity(new Intent(Logar.this,MenuPrincipal.class));
					mensagemExibir("Login", "Usuario Válido PARABÉNS ");
				else
					mensagemExibir("Login", "Usuario Inválido ????");
			}
			catch(Exception erro)
			{
				Log.i("erro", "erro = "+erro);
				Toast.makeText(Logar.this, "Erro.: "+erro, Toast.LENGTH_LONG).show();
			}
			
		}
	});

}
   public void mensagemExibir(String titulo, String texto)
   {
		AlertDialog.Builder mensagem = new AlertDialog.Builder(Logar.this);
		mensagem.setTitle(titulo);
		mensagem.setMessage(texto);
		mensagem.setNeutralButton("OK",null);
		mensagem.show();
   }

}[/code]

Segue o último log também:

09-27 22:28:59.443: I/logar(436): entrou no evento 09-27 22:28:59.443: I/logar(436): vai entrar no try 09-27 22:28:59.703: I/Logar(436): Resposta = [1 09-27 22:28:59.703: I/Logar(436): ] 09-27 22:28:59.703: I/System.out(436): 1 09-27 22:28:59.703: I/System.out(436): 49

coloca também o codigo do “ConexaoHttpClient.executaHttpPost”

Ah, tome cuidado com uma coisa aqui: Tudo que está fora do bloco de script será cuspido na saída, então se tiver algum espaço,Enter ou caractere a mais tudo isso vai ser mandado para o programa client.


E só para constar… se estiver disposto a usar o Appelation Mode troque isso:

por isso

Acho que vai funcionar na hora hehe
:smiley:

Segue abaixo código da classe ConexaoHttpClient…

[code]package br.com.videoaulasneri.conexaoweb;
//biblioteca de java
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
//bibliotecas http
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;

public class ConexaoHttpClient {
public static final int HTTP_TIMEOUT = 30 * 1000;
private static HttpClient httpClient;

private static HttpClient getHttpClient() {
	if (httpClient == null) {
		httpClient = new DefaultHttpClient();
		final HttpParams httpParamns = httpClient.getParams();
		HttpConnectionParams.setConnectionTimeout(httpParamns, HTTP_TIMEOUT);
		HttpConnectionParams.setSoTimeout(httpParamns, HTTP_TIMEOUT);
		ConnManagerParams.setTimeout(httpParamns, HTTP_TIMEOUT);
	}
	return httpClient;
}

public static String executaHttpPost(String url, ArrayList<NameValuePair> parametrosPost) throws Exception {
	BufferedReader bufferedReader = null;
	try {
		HttpClient client = getHttpClient();
		HttpPost httpPost = new HttpPost(url);
		UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parametrosPost);
		httpPost.setEntity(formEntity);
		HttpResponse httpResponse = client.execute(httpPost);
		bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
		StringBuffer stringBuffer = new StringBuffer("");
		String line = "";
		String LS = System.getProperty("line.separator"); // \s
		while ((line = bufferedReader.readLine()) != null) {
			stringBuffer.append(line + LS);
		}
		bufferedReader.close();

		String resultado = stringBuffer.toString();
		return resultado;
	} finally {
		if (bufferedReader != null) {
			try {
				bufferedReader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

public static String executaHttpGet(String url) throws Exception {
	BufferedReader bufferedReader = null;
	try {
		HttpClient client = getHttpClient();
		HttpGet httpGet = new HttpGet(url);			
		httpGet.setURI(new URI(url));
		HttpResponse httpResponse = client.execute(httpGet);
		bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
		StringBuffer stringBuffer = new StringBuffer("");
		String line = "";
		String LS = System.getProperty("line.separator"); // \s
		while ((line = bufferedReader.readLine()) != null) {
			stringBuffer.append(line + LS);
		}
		bufferedReader.close();

		String resultado = stringBuffer.toString();
		return resultado;
	} finally {
		if (bufferedReader != null) {
			try {
				bufferedReader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}			

}

}[/code]

[quote=gomesrod]
Ah, tome cuidado com uma coisa aqui: Tudo que está fora do bloco de script será cuspido na saída, então se tiver algum espaço,Enter ou caractere a mais tudo isso vai ser mandado para o programa client.[/quote]

Não entendi aqui…
Poderia me auxiliar, por favor?


[quote=gomesrod]E só para constar… se estiver disposto a usar o Appelation Mode troque isso:

por isso

Acho que vai funcionar na hora hehe
:D[/quote]

Fiz isso e não funcionou… =/

[quote=marcoostan][quote=gomesrod]
Ah, tome cuidado com uma coisa aqui: Tudo que está fora do bloco de script será cuspido na saída, então se tiver algum espaço,Enter ou caractere a mais tudo isso vai ser mandado para o programa client.[/quote]

Não entendi aqui…
Poderia me auxiliar, por favor?
[/quote]
Quis dizer que o que está dentro do bloco “<?php” é script, e manda para a saída o que é passado ao comando echo, ok ?
Mas o que está fora desse bloco é considerado “página”, ou seja, é enviado direto para a saída; para entender melhor o que estou dizendo, coloque um sinal qualquer no começo do seu arquivo .php, e outro no final. Mais ou menos assim:

INICIO<?php

… restante da pagina …

?>FIM

Agora rode o programa (com aqueles System.out.println() que vc já está usando para debugar o problema), e veja o que ele imprime. As palavras INICIO e FIM saíram junto, certo?
Então… da mesma maneira pode ter algum outro tipo de sujeira que está sendo enviada para a saída do programa PHP.
Uma eu acho que sei o que é: não pode dar depois do ?> , senão essa quebra de linha vai junto (e tem justamente uma quebra de linha chegando na variavel!)

Fiz isso e não funcionou… =/[/quote]
Que pena… tinha certeza que ia funcionar, porque essa expressão retira tudo que não é letra e número. Como fica a saída daqueles prints quando faz dessa forma?

[quote=gomesrod][quote=marcoostan][quote=gomesrod]
Ah, tome cuidado com uma coisa aqui: Tudo que está fora do bloco de script será cuspido na saída, então se tiver algum espaço,Enter ou caractere a mais tudo isso vai ser mandado para o programa client.[/quote]

Não entendi aqui…
Poderia me auxiliar, por favor?
[/quote]
Quis dizer que o que está dentro do bloco “<?php” é script, e manda para a saída o que é passado ao comando echo, ok ?
Mas o que está fora desse bloco é considerado “página”, ou seja, é enviado direto para a saída; para entender melhor o que estou dizendo, coloque um sinal qualquer no começo do seu arquivo .php, e outro no final. Mais ou menos assim:

INICIO<?php

… restante da pagina …

?>FIM

Agora rode o programa (com aqueles System.out.println() que vc já está usando para debugar o problema), e veja o que ele imprime. As palavras INICIO e FIM saíram junto, certo?
Então… da mesma maneira pode ter algum outro tipo de sujeira que está sendo enviada para a saída do programa PHP.
Uma eu acho que sei o que é: não pode dar depois do ?> , senão essa quebra de linha vai junto (e tem justamente uma quebra de linha chegando na variavel!)

Fiz isso e não funcionou… =/[/quote]
Que pena… tinha certeza que ia funcionar, porque essa expressão retira tudo que não é letra e número. Como fica a saída daqueles prints quando faz dessa forma?
[/quote]

Agora entendi.
Infelizmente não tem espaço depois do “?>”, não identifiquei nada fora do “<?php ?>” que esteja gerando espaço…

Não sei porque, mas acho que o erro estaria na classe ConexaoHttpClient por aqui:

[code]bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
StringBuffer stringBuffer = new StringBuffer("");
String line = “”;
String LS = System.getProperty(“line.separator”); // \s
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line + LS);
}
bufferedReader.close();

		String resultado = stringBuffer.toString();
		return resultado;[/code]

Alguém mais poderia me ajudar, por favor?

[quote=marcoostan]Não sei porque, mas acho que o erro estaria na classe ConexaoHttpClient por aqui:

[code]bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
StringBuffer stringBuffer = new StringBuffer("");
String line = “”;
String LS = System.getProperty(“line.separator”); // \s
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line + LS);
}
bufferedReader.close();

		String resultado = stringBuffer.toString();
		return resultado;[/code]

Alguém mais poderia me ajudar, por favor?[/quote]

Você está certo, de fato um dos erros está aqui mesmo!
Repare que sempre é adicionada uma quebra de linha no final da resposta. Essa é aquela quebra de linha que tem depois do “1”, e eu tinha pensado que estava no final do arquivo .php
Mude a lógica para só colocar uma quebra de linha quando efetivamente existirem mais linhas para adicionar.
Ou uma sugestão melhor ainda: use um padrão de comunicação que não dependa tanto desses detalhes como quebra de linha e espaço; por exemplo XML ou JSON. Mas por enquanto deixe assim até fazer funcionar, depois melhore.


Agora o outro erro (o caractere esquisito), mais um palpite: pode ser uma diferença de encoding entre o servidor (php) e o client. Force um mesmo charset a ser usado nos dois lados.
No início do bloco <?PHP use o comando:
header(‘Content-type: text/html; charset=utf-8’);

E use o mesmo no construtor do InputStreamReader, trocando
new InputStreamReader(httpResponse.getEntity().getContent())
por:
new InputStreamReader(httpResponse.getEntity().getContent(), “utf-8”)

Acho que estamos chegando lá! rsrs

Colocando as informações de “utf-8” sumiu o caractere que aparecia no log.

Segue log: 10-01 15:58:45.179: I/logar(330): entrou no evento 10-01 15:58:45.179: I/logar(330): vai entrar no try 10-01 15:58:45.279: I/Logar(330): Resposta = [1 10-01 15:58:45.279: I/Logar(330): ] 10-01 15:58:45.279: I/System.out(330): 1 10-01 15:58:45.279: I/System.out(330): 49

Quanto a mudança de lógica naquele pedaço do código você poderia me auxiliar, por favor?
Não sei a melhor maneira de fazê-lo.

Obrigado pela força! :smiley:

eu não mudaria nada lá ele só concatena um caractere de nova linha, faz um trim agora

[quote=aechiara]eu não mudaria nada lá ele só concatena um caractere de nova linha, faz um trim agora

Tem razão, é uma maneira mais prática de resolver.
Mas em vez de fazer o trim só para mostrar, melhor já substituir o valor da variável:

Bom, está quase funcionando.
Só precisa evitar essa quebra de linha para não retornar mais false.

Segue último log após utilização do trim:

10-01 22:00:10.443: I/logar(467): entrou no evento 10-01 22:00:10.443: I/logar(467): vai entrar no try 10-01 22:00:10.653: I/Logar(467): Resposta = [1] 10-01 22:00:10.664: I/System.out(467): 1 10-01 22:00:10.664: I/System.out(467): 49

Alguma ideia?


nunca vai retornar verdadeiro isso, String é um objeto então vc tem que usar o equals

nunca vai retornar verdadeiro isso, String é um objeto então vc tem que usar o equals

Poxa, fiz tantas edições que nem tinha percebido este erro.

FINALMENTE FUNCIONOU :smiley:

MUITO obrigado à TODOS pela ajuda, de coração.
Não sabem o quanto fico feliz.

Podem colocar o tópico como “Resolvido”.

Mais uma vez obrigado.

Um abraço à todos,
Marco Ostan

Ressuscitando o tópico.
Vi que já está resolvido, mais não entendi bem como chegou na solução.

Eu resolvi da seguinte forma.

Antes

String resposta = respostaRetornada.toString(); resposta = resposta.replaceAll("\\s+", "");
Depois

Comigo funcionou.