Приложение зависает с запросом sqllite - PullRequest
0 голосов
/ 24 мая 2019

Я сделал и приложение для Android, которое получает некоторую информацию и сохраняет в базе данных sqllite в телефоне и отправляет на сервер, но в этом коде висит сообщение

private void obtenerLista() {
    cadenaMandar=new String();
    String updatestr = new String();

    for (int i=0; i<listaDatos.size();i++){
        cadenaMandar=listaDatos.get(i).getCodEmpleado()+"/"+listaDatos.get(i).getLatitud()+"/"+listaDatos.get(i).getLongitud()+"/"+listaDatos.get(i).getFecha()+"/"+listaDatos.get(i).getHora()+"/"+listaDatos.get(i).getSubido();

        //mandar al servidor
        ClassConnection connection=new ClassConnection();
        try {
            cadenaMandar=cadenaMandar.replace(" ", "");
            String response=connection.execute("http://www.urlserver.com.ar/crvp.php?data="+cadenaMandar.toString()).get();
            if (response!=null){
                Toast.makeText(getApplicationContext(),"Mandar a servidor OK",Toast.LENGTH_LONG).show();
                actualizarUsuariosSql(listaDatos.get(i).getIdDatos());
            }
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }

}

Я прочитал на форуме, что я должен выполнить Asynctask, но я до сих пор не понимаю, как мне это сделать в этом коде. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 24 мая 2019

Создайте класс, расширяющий AsyncTask, который выполнит вашу долгую задачу.

public class AsyncClass extends AsyncTask<Void, Void, String> {
    String cadenaMandar = null;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        // Make your fields as variable and initialize them here.
        cadenaMandar = new String();

    }

    @Override
    protected String doInBackground(Void... voids) {


        // Do all your lengthy tasks that you think can take time. Do that in  doInBackground method.

        for (int i = 0; i < listaDatos.size(); i++) {
            cadenaMandar = listaDatos.get(i).getCodEmpleado() + "/" + listaDatos.get(i).getLatitud() + "/" + listaDatos.get(i).getLongitud() + "/" + listaDatos.get(i).getFecha() + "/" + listaDatos.get(i).getHora() + "/" + listaDatos.get(i).getSubido();
            String response = null;

            //mandar al servidor
            ClassConnection connection = new ClassConnection();
            try {
                cadenaMandar = cadenaMandar.replace(" ", "");
                response = connection.execute("http://www.urlserver.com.ar/crvp.php?data=" + cadenaMandar.toString()).get();
                /*if (response!=null){
                    Toast.makeText(getApplicationContext(),"Mandar a servidor OK", Toast.LENGTH_LONG).show();
                    actualizarUsuariosSql(listaDatos.get(i).getIdDatos());
                }*/
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return response;
        }

        @Override
        protected void onPostExecute (String s){ // That "s" in the argument is the "response" that you are returning from doInBackground
        super.onPostExecute(s);

            // Do all the things that are interacting with your UI here in this method.
            // Because you want to call this method actualizarUsuariosSql() before everything happens. Therefore put it there.
            if (s != null) {
                Toast.makeText(getApplicationContext(), "Mandar a servidor OK", Toast.LENGTH_LONG).show();
                actualizarUsuariosSql(listaDatos.get(i).getIdDatos());
            }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...