Return a query with all data from a table for android

Asked

Viewed 1,918 times

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! :)"
            }
        }
    ?>

1 answer

1


One way to do that would be:

  1. Convert database table data into an array of Objects in php
  2. Transform into JSON the objects.
  3. When android request page vc returns json
  4. The android transforms into object the JSON that received
  5. Do what you need to do

These are the steps to solve this problem.

If you don’t want to work with objects, you can simplify it as follows

// Se tem registros..
if (mysql_num_rows( $result ) > 0) {
   $row = mysql_fetch_array($result);
   return json_encode($row)//transforma o array em um json
}
//...

In Java, on android you can download a library called GSON from google that handles a JSON. android will receive the JSON vc need convert to an Object of type List or Arraylist what you think best.

  • Could you help me step by step? For example, how to convert table data into an object array in PHP. @Abraão.

  • Thanks for the help @Abraham, I will test and come back to give a return.

  • 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.

  • For nothing. I passed the steps just for you to delve into each one.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.