я не могу остановить таймер, он не перестает повторяться - PullRequest
0 голосов
/ 17 декабря 2018

Я не могу остановить таймер, хотя я использовал условное, единственное, что не перестает повторяться, я не знаю, куда положить timer.cancel или timer.purgue Когда Nrepetir = false, задача больше не повторяется,Таймер не останавливается, я буду пытаться очистить, отменить и task.cancel или условно, но всегда повторять.ЗДЕСЬ ВСЕ МЕТОДЫ:

  final Handler handler = new Handler();
    final Timer timer = new Timer();

    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            if(Nrepetir==true) {
                Nrepetir=false;
                AsyncHttpClient clienteTurno = new AsyncHttpClient();
                RequestParams rpTurno = new RequestParams();
                rpTurno.put("IdPartida", IdPartida);
                rpTurno.put("IdUsuario", IdUsuario);


                clienteTurno.get(urlTurno, rpTurno, new JsonHttpResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                        if (statusCode == 200) {
                            String respuesta = response.toString();
                            Gson gson = new Gson();
                            ComprobarTurno turno = gson.fromJson(respuesta, ComprobarTurno.class);

                            int res = turno.getSuccess();
                            Log.d("DEBUG - MENSAJE TURNO", turno.getMessage());
                            //Si es correcta

                            turnoJugador = turno.getPosicion();
                            turnoActual = turno.getTurno();
                            valorRecibidoReal = turno.getValorRecibidoReal();
                            valorRecibido = turno.getValorRecibido();


                        }
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

                    }

                    @Override
                    public boolean getUseSynchronousMode() {
                        return false;
                    }




                });

                AsyncHttpClient clienteCorreos = new AsyncHttpClient();
                RequestParams rpCorreos = new RequestParams();
                rpCorreos.put("IdPartida", IdPartida);

                clienteCorreos.get(urlCorreos, rpCorreos, new JsonHttpResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                        if (statusCode == 200) {
                            String respuesta = response.toString();
                            Gson gson = new Gson();
                            CorreosPartida correos = gson.fromJson(respuesta, CorreosPartida.class);
                            int res = correos.getSuccess();


                            lista.addAll(correos.getCorreos());
                            Log.d("DEBUG - NOMBRE1", lista.get(0));;
                            Log.d("DEBUG - NOMBRE2", lista.get(1));;


                        }
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

                    }

                    @Override
                    public boolean getUseSynchronousMode() {
                        return false;
                    }
                });


                AsyncHttpClient clienteFallos = new AsyncHttpClient();
                RequestParams rpFallos = new RequestParams();
                rpFallos.put("IdPartida", IdPartida);

                clienteFallos.get(urlFallos, rpFallos, new JsonHttpResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                        if (statusCode == 200) {
                            String respuesta = response.toString();
                            Gson gson = new Gson();
                            FallosPartida fallos = gson.fromJson(respuesta, FallosPartida.class);
                            Log.d("DEBUG - FALLOS", fallos.getMessage());

                            for (String s : fallos.getFallos()) {
                                listaFallosVariable.add(Integer.valueOf(s));
                                Log.d("DEBUG - FALLOS", s);
                            }

                        }
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

                    }

                    @Override
                    public boolean getUseSynchronousMode() {
                        return false;
                    }
                });
            }else {
                Log.d("DEBUG - TIMER CANCEL", String.valueOf(Nrepetir));

                timer.cancel();
            }
        }
    };

    Log.d("DEBUG - BOOLEAN", String.valueOf(Nrepetir));

        timer.schedule(task, 0, 3000);

1 Ответ

0 голосов
/ 17 декабря 2018

У меня была такая же проблема раньше.Он запускает новую TimerTask каждый раз, когда вы выполняете свой код, поэтому он будет запускаться столько раз, сколько вы его выполняете.Чтобы предотвратить это, я создал еще один столбец из моей базы данных, который проверяет, находится ли расписание в очереди с заданием таймера.Например:

После запуска timerTask измените состояние на 1, затем после его выполнения измените его на 0. Это будет работать, если есть условный оператор, по которому ваша таймерная задача будет выполняться только при статусе 0.

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

...