0
Good afternoon guys, I’ve been having a question for a long time but I’m just trying to get it out now. I have an app that communicates with an online database remotely through a PHP Web Service. I have no problems if the data I need to return from my database comes in String form. For example:
I want to authenticate a user in the Android app, send user and password to the php page. The page in turn queries the user in the database and then returns a string saying user found or user not found.
My question is the following, as I would return for example, all users of database table for android?
Class method I get response from server request remotely:
/** O cliente HTTP usado para executar requisicoes HTTP. */
private HttpURLConnection urlConnection = null;
/** Tempo de espera em milisegundos. */
/** Resposta da requisicao com servidor remoto HTTP. */
private String resposta = "";
/** BufferedReader para o fluxo de entrada da URLConnection. Necessario para poder usar o metodo readLine(). */
BufferedReader reader = null;
/** Fluxo de saida para escrever dados na URLConnection. */
OutputStream outputStream = null;
/**
* Faz uma requisicao com um servidor remoto HTTP atraves do metodo POST. Envia uma lista de parametros e obtem uma resposta.
* @param url O cliente HTTP. A URL a ser feita a conexao. O endereco.
* @param parametros A lista de parametros a serem enviados para o cliente HTTP.
* @return A resposta do cliente HTTP.
* @throws Exception Se houver erro em alguma etapa da requisicao
*/
public String getHttpPost( String url, List<NameValuePair> parametros ) throws Exception {
try {
// Referencia do webservice.
URI uri = new URI( url );
// Retorna uma nova conexao para o recurso referenciado na URL.
urlConnection = (HttpURLConnection) uri.toURL().openConnection();
// URLConnection permite a entrada de dados. Ele nao pode ser definido depois que a conexao e estabelecida.
urlConnection.setDoInput( true );
// URLConnection permite a saida de dados. Ele nao pode ser definido depois que a conexao e estabelecida.
urlConnection.setDoOutput( true );
// Define o comando de requisicao que sera enviado ao servidor HTTP remoto - Informacao do webservice. Este metodo so pode ser chamado antes da conexao ser feita.
urlConnection.setRequestMethod( "POST" );
// Obtem o fluxo de saida (Objeto OutputStream) para gravar dados na URLConnection.
// O fluxo e um arquivo, uma pagina da web, ou uma tela, nao importa. Tudo o que importa e que voce recebe as informacoes do fluxo ou envia informacoes para esse fluxo.
outputStream = urlConnection.getOutputStream();
// Escreve os dados no fluxo
outputStream.write( formataParametros( parametros ).getBytes() );
// Fecha o fluxo de saida
outputStream.close();
// Verifica se a resposta esta ok antes de solicitar os dados.
if( urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK ) {
// Obtem o fluxo de entrada (Objeto InputStream) para leitura de dados na URLConnection.
InputStream inputStream = new BufferedInputStream( urlConnection.getInputStream() );
// Constroi um novo InputStreamReader no InputStream dentro dos paranteses decodificando os dados.
reader = new BufferedReader( new InputStreamReader( inputStream, "UTF-8" ) );
StringBuilder builder = new StringBuilder();
// Aramzena os dados de leitura do fluxo de entrada.
String line = null;
// Enquanto houver dados a ler, armazenar em builder.
while( ( line = reader.readLine() ) != null ) {
builder.append(line).append("\n");
}
// Armazena os dados recebidos da requisacao na resposta.
resposta = builder.toString();
}
else{
// Exibe no LogCat mensagem de resposta retornada pelo servidor HTTP remoto.
Log.i("WebService", "ResponseCode: " + urlConnection.getResponseMessage());
}
return resposta;
}
finally {
if( ( outputStream != null ) || ( reader != null )) {
try {
// Fecha o fluxo de saida.
outputStream.close();
// Fecha o fluxo de entrada.
reader.close();
}
catch( IOException ioE ) {
Log.e("WebService", "Erro.: ", ioE);
}
}
} // Fim do finally
}
As you can see in the above method, the return type is String. I want to return all records from my database table and not just a String.
And this is the php file, in this example I want to query all users in the database and return the query to Android. I only know how to return values in String form. How could I return all rows of the table with their respective values?
<?php
// Inclui o arquivo para conexão com o banco de dados.
include( "conecta_database.php" );
// Tabela do usuario que irei consultar.
$tableUser = "usuario";
// Obtem os valores enviados através do método POST pelo app android. Nesse caso não usarei isso.
$email = urldecode($_POST['email']);
$password = urldecode($_POST['password']);
// Procura por todos os usuário no banco de dados.
$queryUser = "SELECT * FROM `$tableUser`";
// Executa a consulta e retorna um cursor para a variável $result".
$result = mysql_query( $queryUser, $connection );
if (!$result) {
die("Consulta invalida: " . mysql_error());
} else {
// Se tem registros..
if (mysql_num_rows( $result ) > 0) {
$row = mysql_fetch_array($result);
// Como retorno todos os usuários da consulta e seus respectivos dados?
} else {
return "String já sei retornar, quero retornar linhas de um banco de dados! :)"
}
}
?>
Could you help me step by step? For example, how to convert table data into an object array in PHP. @Abraão.
– Lucas Santos
Thanks for the help @Abraham, I will test and come back to give a return.
– Lucas Santos
I was able to solve my problem with JSON and GSON, I studied them a little more and I was able to solve them. I didn’t know them and I found them very good. Thank you. @Abraham.
– Lucas Santos
For nothing. I passed the steps just for you to delve into each one.
– Skywalker