내 앱의 일부로 타이머를 만들고 있습니다. 나는 튜토리얼을 따랐고, 나의 필요에 더 잘 부합하도록 프로그램을 수정했다. 그러나, 내가 응용 프로그램을 실행할 때, 나는 timerTextView (XML에서 정의 된)의 기본값을 얻거나 그냥 임의의 숫자를 얻는다. 무슨 일 이니?Android/Java - 카운트 다운 타이머가 작동하지 않습니다.
업데이트 : 여기 활동에 대한 coomplete 코드 :
public class Main7Activity extends AppCompatActivity {
private TextView countDownText;
private CountDownTimer countDownTimer;
//private long timeLeftInMilliseconds = 1000*60*60*24*7*1;
public TextView textView3;
public TextView textView4;
public TextView textView5;
public TextView textView6;
public long timeLeftInMilliseconds;
//private int daysToGo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main7);
textView3 = (TextView) findViewById(R.id.testText);
textView4 = (TextView) findViewById(R.id.testText2);
textView5 = (TextView) findViewById(R.id.testText3);
textView6 = (TextView) findViewById(R.id.testText4);
//textView3.setText(Integer.toString(Main6Activity.progress2));
Calendar now = Calendar.getInstance();
textView3.setText("LMP date : " + Main6Activity.textView.getText());
int currentDayOfYear = now.get(Calendar.DAY_OF_YEAR);
//Day of year is the LMP date
now.set(Calendar.DAY_OF_YEAR, Main6Activity.progress2);
int lmpDate = now.get(Calendar.DAY_OF_YEAR);
//Day of year is due date
now.add(Calendar.DAY_OF_YEAR, 7*40);
textView4.setText("Due Date: " + now.get(Calendar.DATE) + "-"
+ (now.get(Calendar.MONTH) + 1) + "-" + now.get(Calendar.YEAR));
int dueDate = now.get(Calendar.DAY_OF_YEAR);
if (dueDate < 365 && lmpDate > 82){
dueDate = dueDate + (365);
}
if (lmpDate<82 && lmpDate>49){
dueDate = dueDate + lmpDate;
}
if (lmpDate<50) {
textView5.setText("Congratulations on Delivery");
}
else {
textView5.setText(Integer.toString(dueDate));
}
//textView5.setText(now.getTime().toString());
//int currentDayOfYear = Calendar.DAY_OF_YEAR;
int daysToGo = dueDate - currentDayOfYear;
textView6.setText(Integer.toString(daysToGo));
timeLeftInMilliseconds = 1000*60*60*24*daysToGo;
countDownText = (TextView) findViewById(R.id.weeks);
startTimer();
}
public void startTimer(){
countDownTimer = new CountDownTimer(timeLeftInMilliseconds, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMilliseconds = millisUntilFinished;
updateTimer();
}
@Override
public void onFinish() {
}
}.start();
}
public void updateTimer(){
int weeks = (int) timeLeftInMilliseconds/604800000;
int days = (int) (timeLeftInMilliseconds % 604800000)/86400000;
//int hours = (int) (timeLeftInMilliseconds % 86400000)/3600000;
//int minutes = (int) (timeLeftInMilliseconds % 3600000)/60000;
int seconds = (int) (timeLeftInMilliseconds % 60000)/1000;
String timeLeftText;
timeLeftText = "";
if (weeks < 10) timeLeftText += "0";
timeLeftText += weeks;
timeLeftText += ":";
if (days < 10) timeLeftText += "0";
timeLeftText += days;
//timeLeftText += ":";
//if (hours < 10) timeLeftText += "0";
//timeLeftText += hours;
//timeLeftText += ":";
//timeLeftText += minutes;
//timeLeftText += ":";
if (seconds < 10) timeLeftText += "0";
timeLeftText += seconds;
countDownText.setText(timeLeftText);
}
public void editInfo(View v){
Intent intent = new Intent(Main7Activity.this, Main6Activity.class);
startActivity(intent);
}
}
나는 또한 백그라운드에서 실행하는 타이머가 필요합니다. 이 코드가 그렇게할까요?
감사합니다.
당신이 완전한 활동 코드를 게시 할 수 있습니까? –
countDownText.setText (timeLeftText)가 주 스레드에서 실행되는지 확인하십시오. Ui 항목을 백그라운드 스레드에서 업데이트하려고하면 UI가 실제로 업데이트되지 않을 것이라고 생각합니다. 나는 당신이 당신의 타이머 클래스를 어디에서 실행하는지 안다. 그래서 이것이 사실인지 확실하지 않다. – Saik