У меня есть асинхронная задача в 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, и это вызывает серию ошибок.
Я решил эту проблему, добавив переменную флага булевого типа, чтобы избежать этой проблемы.
Мой вопрос:
Есть ли способ сделать этот контроль лучше?