Fetch data from a JSON-shaped Sqlite table and send Webservice

Asked

Viewed 107 times

0

Good morning guys, I’ve been in this problem for a few days... I know how to send an item from Sqlite to Webservice, but how do I send an entire table at once?

Scenario: The user makes a stock count and adds items, on the screen there is a button that searches all the items and sends them to the Webservice. The items are not added I think my JSON is wrong (missing a key at the beginning with the table name, I do not know how to do this).

JSON:

[{"IdAgendamento":"2","Filial":"1","CodigoProduto":"3","CodigoAlmox":"0","QuantidadeContada":"7","DataHoraContagem":"30-08-2019-17:53:07","SemAgendamento":"true"},{"IdAgendamento":"2","Filial":"1","CodigoProduto":"4","CodigoAlmox":"0","QuantidadeContada":"7","DataHoraContagem":"02-09-2019-10:34:02","SemAgendamento":"true"}]

On the PHP side I don’t know how to find the values of each item I’ve tried in several ways...

PHP code:

<?php
header('Content-Type: application/json; charset=utf-8');

$response["erro"] = false;


if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    require_once('dbConnect.php');

    $itens = $_POST;

    mysqli_set_charset($con, "utf8");

    print_r($itens);

    foreach ($itens as $key => $value) {
        $idAgendamento = $_POST["idAgendamento"];
        $Filial = $_POST["filial"];
        $CodigoProduto = $_POST["codigoProduto"];
        $CodigoAlmox = $_POST["codigoAlmox"];
        $Quantidade = $_POST["quantidadeContada"];
        $DataHoraContagem = $_POST["dataHoraContagem"];
        $SemAgendamento = $_POST["semAgendamento"];


        $values[] = "('$idAgendamento', '$Filial', '$CodigoProduto', '$CodigoAlmox', '$Quantidade', '$DataHoraContagem', '$SemAgendamento')";

        $sql = 'INSERT INTO tabela (idAgendamento, Filial, CodigoProduto, CodigoAlmox, Quantidade, DataHoraContagem, SemAgendamento)
        VALUES '.implode(PHP_EOL.', ', $values);

    }

        if (mysqli_query($con, $sql))
     {
            echo "Sucesso";         
      } else {

            echo "Erro ".$sql;
      }

    mysqli_close($con);


} else {

  echo "Acesso Negado";
}

?>

onBackground of service:

try {
            URL url = new URL(STRING_URL);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setRequestMethod("POST");

            connection.setRequestProperty("Content-type", "application/json");
            connection.setRequestProperty("Accept", "application/json");

            connection.setDoOutput(true);

            //String json = new Gson().toJson(jsonArrays);

            PrintStream printStream = new PrintStream(connection.getOutputStream());
            printStream.println(jsonArrays);

            connection.connect();
            connection.getResponseCode();
            connection.getResponseMessage();


            String jsonDeResposta;

            if (connection.getResponseCode() == (HttpURLConnection.HTTP_OK)) {
                jsonDeResposta = "sucesso";
            } else {

                jsonDeResposta = "falhou";
            }

            return jsonDeResposta;

NOTE: Using Postman and placing parameters (1 item) it adds 7 items, which is the number of columns in the table not the number of items. If I try to add by emulator it does not add any in the table.

@Edit: I redid Asynctask, it was not passing any value. public class Webclient extends Asynctask { Handler Handler = new Handler();

    @Override
    protected String doInBackground(JSONArray... jsonArrays) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                MainActivity.progressBar.setVisibility(View.VISIBLE);
            }
        });
        String json = new Gson().toJson(jsonArrays);
        OkHttpClient client = new OkHttpClient();
        //TODO Inserir site para envio do JSON da tabela "ProdutoQuantidade"
        String url = "SERVER_URL";
        //TODO Tentar utilizar:
        //HttpURLConnection urlConnection = getConnection(url);
        Request.Builder builder = new Request.Builder();
        builder.url(url);
        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(mediaType, json);
        builder.post(body);

        Request request = builder.build();

        try {
            Response response = client.newCall(request).execute();
            String jsonDeResposta = response.body().string();
            return jsonDeResposta;
        } catch (Exception e) {
            e.printStackTrace();
            return "falhou";
        }
  }

PHP:

<?php
header('Content-Type: application/json; charset=utf-8');

$response["erro"] = false;


if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    require_once('dbConnect.php');

    $itens = $_POST;

    mysqli_set_charset($con, "utf8");



    foreach ($itens as $key => $value) {
        $idAgendamento = $_POST["idAgendamento"];
        $Filial = $_POST["filial"];
        $CodigoProduto = $_POST["codigoProduto"];
        $CodigoAlmox = $_POST["codigoAlmox"];
        $Quantidade = $_POST["quantidadeContada"];
        $DataHoraContagem = $_POST["dataHoraContagem"];
        $SemAgendamento = $_POST["semAgendamento"];


        $values[] = "('$idAgendamento', '$Filial', '$CodigoProduto', '$CodigoAlmox', '$Quantidade', '$DataHoraContagem', '$SemAgendamento')";

        $sql = 'INSERT INTO tabela (idAgendamento, Filial, CodigoProduto, CodigoAlmox, Quantidade, DataHoraContagem, SemAgendamento)
        VALUES '.implode(PHP_EOL.', ', $values);

        if (mysqli_query($con, $sql))
        {
            echo "Sucesso";         
        } else {

            echo "Erro ".$sql;
        }

    }



    mysqli_close($con);


} else {

  echo "Acesso Negado";
}

?>

By Postman Adds Multiple Items

1 answer

0


After 4 days of searching I present the solution:

PHP code:

<?php
header('Content-Type: application/json; charset=utf-8');

$response["erro"] = false;


if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    require_once('dbConnect.php');

    //Busca o JSON passado via POST pelo app
    $itens = file_get_contents('php://input');

    mysqli_set_charset($con, "utf8");

    //Converte o JSON em Array de objetos
    $array_obj = json_decode($itens);

    //conta quantidade de registros
    $qtd_itens = count($array_obj);


    for ($i = 0; $i<$qtd_itens; $i++) {
        $idAgendamento = $array_obj[$i]->{'IdAgendamento'};
        $Filial = $array_obj[$i]->{'Filial'};
        $CodigoProduto = $array_obj[$i]->{'CodigoProduto'};
        $CodigoAlmox = $array_obj[$i]->{'CodigoAlmox'};
        $Quantidade = $array_obj[$i]->{'QuantidadeContada'};
        $DataHoraContagem = $array_obj[$i]->{'DataHoraContagem'};
        $SemAgendamento = $array_obj[$i]->{'SemAgendamento'};

        $values[] = "('$idAgendamento', '$Filial', '$CodigoProduto', '$CodigoAlmox', '$Quantidade', '$DataHoraContagem', '$SemAgendamento')";
    }

    $sql = 'INSERT INTO tabela (idAgendamento, Filial, CodigoProduto, CodigoAlmox, Quantidade, DataHoraContagem, SemAgendamento)
        VALUES '.implode(PHP_EOL.', ', $values);

        if (mysqli_query($con, $sql))
        {
            echo "Sucesso";
        } else {

            echo "Erro ".$sql;
        }

    mysqli_close($con);

} else {

  echo "Acesso Negado";
}

?>

Java code:

@Override
protected String doInBackground(JSONArray... jsonArrays) {
    handler.post(new Runnable() {
        @Override
        public void run() {
            MainActivity.progressBar.setVisibility(View.VISIBLE);
        }
    });
    //String json = new Gson().toJson(jsonArrays);
    OkHttpClient client = new OkHttpClient();
    //TODO Inserir site para envio do JSON da tabela "ProdutoQuantidade"
    String url = "STRING_URL";

    Request.Builder builder = new Request.Builder();
    builder.url(url);
    MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
    RequestBody body = RequestBody.create(mediaType, String.valueOf(jsonArrays[0]));
    builder.post(body);

    Request request = builder.build();

    try {
        Response response = client.newCall(request).execute();
        String jsonDeResposta = response.body().string();
        return jsonDeResposta;
    } catch (Exception e) {
        e.printStackTrace();
        return "falhou";
    }

}

Thank you all...

Sources:

How to receive data via POST, sent from android to PHP webservice?

Remote REST webservice in PHP receiving JSON via POST with problems

Browser other questions tagged

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