Return a query with all data from a table to the android

0

Good afternoon guys, I've had a question for a long time but I've only been 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 the form of String. For example:

I want to authenticate a user in the Android app, pass 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 as follows, how would I return, for example, all users of the database table for android?

Class method that I get response from request with server 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 the records in my database table and not just a String.

And this is the php file, in this example I want to query all the users in the database and return the query to Android. I just know return values in the form of String. How can I return all rows in 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! :)"
            }
        }
    ?>
    
asked by anonymous 08.04.2015 / 21:57

1 answer

1

One way to do this would be:

  • Convert database table data into an array of Objects in php
  • Transform objects into JSON .
  • When the android requests the page you return json
  • The android transforms the JSON object it received into
  • Do whatever you need to do
  • These are the steps to solve this problem.

    If you do not want to work with objects, you can simplify them 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, in android you can download a library called google's GSON that handles a JSON. The android will get the JSON you need to convert it to an Object of type List or ArrayList whatever you think is best.

        
    08.04.2015 / 22:17