Асинхронное задание выполняется 2 раза из-за низкого качества интернета. - PullRequest
0 голосов
/ 28 июня 2018

У меня есть асинхронная задача в Android Studio, чтобы отправлять и получать данные с сервера следующим образом.

 private class myTask extends AsyncTask<Void, Void, Integer> {
        Exception excepccion;

        protected void onPreExecute() {
           super.onPreExecute();
Mensaje.mensajeConectandoseSicoy(actMetodoPago,getString(R.string.msg_conexion_sicoy));
        }
        
        @Override
        protected Integer doInBackground(Void... params) {
        try {
                return new Servidor().guardarObtnerInfoServidorSicoy(ACCION_PAGAR_PEDIDO);
            } catch (Exception e2) {
                excepccion = e2;
                return -1;
            }
        }
        
          @Override
        protected void onPostExecute(Integer respuesta) {
         Mensaje.detenerMensajeConectandoseSicoy();
...
        }

Где:

    public static void mensajeConectandoseSicoy(Context context, String mensaje){
        pd = new ProgressDialog(context);
        pd.setMessage(mensaje);
        pd.setCancelable(false);

        Handler pdCanceller = new Handler();
        pd.show();


    }
    public static void detenerMensajeConectandoseSicoy(){
        if (pd.isShowing()){
            pd.dismiss();
        }
    }

Этот процесс работал очень хорошо, пока пользователь не сообщил о проблемах и не обнаружил, что его интернет имеет очень низкое качество.

Когда задача выполняется на PostExecute, то есть когда сервер уже ответил, она снова выполняется на PreExecute, и это вызывает серию ошибок.

Я решил эту проблему, добавив переменную флага булевого типа, чтобы избежать этой проблемы.

Мой вопрос:

Есть ли способ сделать этот контроль лучше?

...