How to insert a list of data using the volley

0

My application writes all position information within the field-based table. This table has a column named "SENT".

I have to do a select returning all the positions that were not sent and send to a webserver, after sending and the result is OK, I need to set the flag to TRUE, sent.

I have 2 problems.

1 - Using the volley, it sends only the last position, because when I do:

for (DadosPosicao dadosposicao : dadosposicoes) {
    params.put(Constantes.KEY_DISPOSITIVO, app.getSistema().getDispositivoID());
    params.put(Constantes.KEY_LATITUDE, String.valueOf(dadosposicao.getLatitude()));
    params.put(Constantes.KEY_LONGITUDE, String.valueOf(dadosposicao.getLatitude()));
    params.put(Constantes.KEY_DTLOG, Funcoes.formatarDataHora(dadosposicao.getDtlog(), "yyyy-MM-dd HH:mm:ss"));
    params.put(Constantes.KEY_DTRECEBIMENTO, Funcoes.formatarDataHora(dadosposicao.getDtRecebimento(), "yyyy-MM-dd HH:mm:ss"));
    params.put(Constantes.KEY_PANICO, String.valueOf(dadosposicao.getPanico() ? 1 : 0));
    params.put(Constantes.KEY_VELOCIDADE, String.valueOf(dadosposicao.getVelocidade()));
    params.put(Constantes.KEY_HODOMETRO, String.valueOf(dadosposicao.getHodometro()));
    params.put(Constantes.KEY_DIRECAO, String.valueOf(dadosposicao.getDirecao()));

}

I understand that it overlaps my KEY. :

2 - How do I know that position was successfully sent to change the flag to true?

Today I have the following:

public void EnviarPosicoes() {

    if (isOnline()) {
        LocalDao<DadosPosicao> dadosPosicaoDao = LocalFactoryDB.getDao(this, DadosPosicao.class);

        final List<DadosPosicao> dadosposicoes = ((DadosPosicaoLocalDao) (dadosPosicaoDao))
                .selectDadosPosicaoNaoEnviados();

        if (dadosposicoes.size() > 0) {
            StringRequest postRequest = new StringRequest(Request.Method.POST, servidor,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.i("mrcsistemas", response);
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            error.printStackTrace();
                        }
                    }
            ) {
                @Override
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<>();

                    Log.i(Constantes.TAG, app.getSistema().getDispositivoID());

                    for (DadosPosicao dadosposicao : dadosposicoes) {
                        params.put(Constantes.KEY_DISPOSITIVO, app.getSistema().getDispositivoID());
                        params.put(Constantes.KEY_LATITUDE, String.valueOf(dadosposicao.getLatitude()));
                        params.put(Constantes.KEY_LONGITUDE, String.valueOf(dadosposicao.getLatitude()));
                        params.put(Constantes.KEY_DTLOG, Funcoes.formatarDataHora(dadosposicao.getDtlog(), "yyyy-MM-dd HH:mm:ss"));
                        params.put(Constantes.KEY_DTRECEBIMENTO, Funcoes.formatarDataHora(dadosposicao.getDtRecebimento(), "yyyy-MM-dd HH:mm:ss"));
                        params.put(Constantes.KEY_PANICO, String.valueOf(dadosposicao.getPanico() ? 1 : 0));
                        params.put(Constantes.KEY_VELOCIDADE, String.valueOf(dadosposicao.getVelocidade()));
                        params.put(Constantes.KEY_HODOMETRO, String.valueOf(dadosposicao.getHodometro()));
                        params.put(Constantes.KEY_DIRECAO, String.valueOf(dadosposicao.getDirecao()));

                    }

                    return params;
                }
            };

            Volley.newRequestQueue(this).add(postRequest);

        }
    }
}

My question, what is the correct way to send my list of approximately 10 positions? How do I know the position was sent successfully?

    
asked by anonymous 23.03.2016 / 21:09

1 answer

1

They are overlapping your key, in case you can try to send it as follows.

for(int i =0;i<dadosposicoes.lenght;i++){
params.put(Constantes.KEY_LATITUDE+i, dadosposicoes.get(i).getLatitude());
//outros params...}

To recover is only you to make a for and pick up by position.

The very same would be you working with JSON, the lib volley of support. your data in JSON would look something like this:

{
"dados": [
    {
        "dispositivo_id":"xxx-yyy",
        "Latitude":"xxxx",
        "longitude":"xxxx",
        "data_recebimento":"xxxx",
        "panico":"xxxx",
        "velocidade":"xxxx",
        "hodometro":"xxxx",
        "direcao":"xxxx"
    },
    {
        "dispositivo_id":"xxx-yyy",
        "Latitude":"xxxx",
        "longitude":"xxxx",
        "data_recebimento":"xxxx",
        "panico":"xxxx",
        "velocidade":"xxxx",
        "hodometro":"xxxx",
        "direcao":"xxxx"
    },
    {
        "dispositivo_id":"xxx-yyy",
        "Latitude":"xxxx",
        "longitude":"xxxx",
        "data_recebimento":"xxxx",
        "panico":"xxxx",
        "velocidade":"xxxx",
        "hodometro":"xxxx",
        "direcao":"xxxx"
    }
]

}

Of course, this is just a tip.

    
24.03.2016 / 21:44