0
У меня есть этот код, который просто отображает обратный отсчет времени для события. У меня возникла проблема с последними секундами прыгать цифры в отличие от обычных часов. Вот код, с которым я работаю. Может кто-то, пожалуйста, предложите некоторые рекомендации, где эта проблема может быть. С уважением.TextView таймер секунд число прыгает
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Timer().schedule(new TimerTask() {
File sdcard = Environment.getExternalStorageDirectory();
File cfgFile = new File(sdcard, "TimeTillParis/config.txt");
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
try {
InputStream is = new FileInputStream(cfgFile);
Properties prop = new Properties();
prop.load(is);
int mmY = Integer.parseInt(prop.getProperty("YEAR"));
int mmM = Integer.parseInt(prop.getProperty("MONTH"));
int mmD = Integer.parseInt(prop.getProperty("DAY"));
int mmH = Integer.parseInt(prop.getProperty("HOUR"));
int mmC = Integer.parseInt(prop.getProperty("MINUTE"));
int mmS = Integer.parseInt(prop.getProperty("SECOND"));
Calendar cal = Calendar.getInstance();
Date today = new Date(System.currentTimeMillis());
cal.set(Calendar.YEAR, mmY);
cal.set(Calendar.MONTH, mmM);
cal.set(Calendar.DAY_OF_MONTH, mmD);
cal.set(Calendar.HOUR_OF_DAY, mmH);
cal.set(Calendar.MINUTE, mmC);
cal.set(Calendar.SECOND, mmS);
long milliseconds = (cal.getTimeInMillis() - today.getTime());
String mD="", mH="", mM="", mS="", boxText="";
mD += (milliseconds/(1000*60*60*24));
mH += (milliseconds/(1000*60*60) % 24);
mM += (milliseconds/(1000*60) % 60);
mS += (milliseconds/1000 % 60);
boxText += "Next visit to Paris in \n\n" +
mD + "d " +
mH + "h " +
mM + "m " +
mS + "s";
TextView textView = (TextView) findViewById(R.id.textView_date_display);
textView.setText(boxText);
} catch (FileNotFoundException e) {
String cfgNotFound="";
cfgNotFound += "config.txt not found!";
TextView textView = (TextView) findViewById(R.id.textView_date_display);
textView.setText(cfgNotFound);
//e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}, 0, 100);
}
}
Большое спасибо, это работает прекрасно. С расчетом есть только одна проблема. Дата, которую я определил, относится к 25 апреля 2013 года (у меня есть месяц, определенный как 3 в файле конфигурации), и на дисплее в настоящее время отображается только 15d 1h 48m 14s, когда это должно быть около 45d 12h. Я попытался это исправить, но это еще одна вещь, которую мне нужно изучить. –
Как насчет сохранения временной отметки unix (miliseconds с 1970-01-01) в ваш файл? IMHO montsh подсчитываются с нуля. – gingo
У меня есть правильные дни, часы и минуты. Я добавил часовой пояс CEST (только для тестирования), а также вычитал 1 месяц, а также 1 день, используя cal.add(). –