Problema de cuenta regresiva al mostrar los días, horas, minutos, segundos, utilizando el temporizador de cuenta atrás en android

Estoy usando el temporizador de cuenta regresiva en mi aplicación donde necesito mostrar la próxima fecha en días horas minutos y segundos left.I consiguió los días, horas, minutos y segundos, pero cuando lo configuré a vista de texto la cuenta regresiva no start.The siguiente es mi código

Date date = new Date(2013,Integer.parseInt(datess.get(k).split("-")[1])-1,Integer.parseInt(datess.get(k).split("-")[0]),hours,mins,secs); long dtMili = System.currentTimeMillis(); Date dateNow = new Date(dtMili); remain = date.getTime() - dateNow.getTime(); MyCount counter = new MyCount(remain,1000); counter.start(); public class MyCount extends CountDownTimer{ public MyCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onFinish() { // TODO Auto-generated method stub tv3.setText("done"); } @Override public void onTick(long millisUntilFinished) { // TODO Auto-generated method stub tv3.setText(timeCalculate(millisUntilFinished/1000) + " Countdown"); } } public String timeCalculate(long ttime) { long daysuuu,hoursuuu, minutesuuu, secondsuuu; String daysT = "", restT = ""; daysuuu = (Math.round(ttime) / 86400); hoursuuu = (Math.round(ttime) / 3600) - (daysuuu * 24); minutesuuu = (Math.round(ttime) / 60) - (daysuuu * 1440) - (hoursuuu * 60); secondsuuu = Math.round(ttime) % 60; if(daysuuu==1) daysT = String.format("%d day ", daysuuu); if(daysuuu>1) daysT = String.format("%d days ", daysuuu); restT = String.format("%02d:%02d:%02d", hoursuuu, minutesuuu, secondsuuu); return daysT + restT; } 

Esta es la salida

introduzca la descripción de la imagen aquí

¿Por qué no se inicia la cuenta regresiva? Cualquier sugerencia es apreciada.

No está utilizando el parámetro millisUntilFinished para actualizar su tiempo en timeCalculate() . Empezar con:

 @Override public void onTick(long millisUntilFinished) { tv3.setText(millisUntilFinished + " Countdown"); } 

Una vez que haya confirmado que el temporizador está funcionando, necesitará un método para convertir millisUntilFinished en una cadena legible por humanos.

Las clases relacionadas con fechas y horas en Java son innecesariamente difíciles de trabajar y tienen algunos errores oscuros. (Por ejemplo, gran parte de la clase Date está obsoleta, pero la clase de calendario recomendada sigue dependiendo mucho de la fecha …) La biblioteca de terceros Joda Time es un reemplazo popular.


Adición

la salida no es lo que esperaba

25.000 a 700 días en el futuro no es lo que yo esperaría, la date parece estar mal. Como señala gabriel en otra respuesta a esta pregunta, el valor del año se calcula a partir de 1900. Aunque otra cosa sigue siendo errónea ya que 25.000 días es menos de 70 años en el futuro …
Sin embargo, este constructor está obsoleto y no se debe utilizar, Calendar es la clase recomendada. Escribí una demostración rápida usando el calendario para ti.

Pero entiende que CountDownTimer en sí tiene un par de defectos fundamentales:

  • Cada vez que onTick() se llama CDT agrega unos milisegundos al tiempo total, me di cuenta de que puede agregar fácilmente 7 minutos y medio cada día.
  • Debido al primer error, el último onTick() puede no ser llamado. Cuando cuente abajo a partir de 5, veo típicamente "5, 4, 3, 2, <long pause>" entonces onFinished() exhibe "0"

Reescribí CDT en una pregunta previa: android CountDownTimer – retraso adicional de milisegundos entre las garrapatas .

Su problema es que no está utilizando Date () correctamente.

Los parámetros de java.util.Date.Date (int año, int mes, int día, int hora, int minuto, int segundo), utiliza 0 en el primer parámetro para indicar el año 1900.

El código que escribió calcula una fecha de casi 2000 años en el futuro, luego resta tiempo actual, lo que hace que una cuenta regresiva muy larga ;-).

La aplicación debería funcionar si cambia la línea

 Date date = new Date(2013-1900,Integer.parseInt(datess.get(k).split("-")[1])-1,Integer.parseInt(datess.get(k).split("-")[0]),hours,mins,secs); 

Estimado Chronometer uso.

 int seconds; chronometer.setOnChronometerTickListener(new OnChronometerTickListener() { public void onChronometerTick(Chronometer chronometer) { seconds = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000); String strTime = (seconds / 60) + ":" + (seconds % 60); lblTime.setText(strTime); } }); chronometer.setBase(SystemClock.elapsedRealtime()); chronometer.start 

Después de que intente mientras trabaja. y obtener el día y la hora que desee.

Prueba este código

 CountDownTimer countDown = new CountDownTimer(3000,1000) { @Override public void onTick(long millisUntilFinished) { // TODO Auto-generated method stub } @Override public void onFinish() { // TODO Auto-generated method stub } }; countDown.start(); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.