How to insert a data list using Volley

Asked

Viewed 149 times

0

My application saves all position information within the table.
This table has a column called "SENT".

I have to make a select by returning all positions that were not sent and sending 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 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 understood that it overrides my KEY. :(

2 - How do I know that position was successfully sent in order 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 doubt, what is the correct way to send my list of approximately 10 positions? How do I know the position was successfully sent?

1 answer

1

Are overlapping yes your key, in case you can try to send 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 just go for and pick up by position.

the same would be you working with JSON, the lib Volley of the support. your data in JSON would be something quite similar to that:

{
"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 it’s just a tip.

  • Thanks for the tip, I’m using cakephp to be the webserver.

Browser other questions tagged

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