2011-05-07 5 views
4

카운트 다운 타이머를 구현하고 있지만 작동하지 않습니다. 아래는 코드입니다.안드로이드의 CountDownTimer

package FinalProj.com; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 
import android.os.CountDownTimer; 

public class iFallApp extends Activity{ 
    public TextView textView1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //TextView textview = new TextView(this); 
     //textview.setText("This is the iFall tab"); 
     // setContentView() 
     setContentView(R.layout.ifallapp); 

     textView1=(TextView) findViewById(R.id.textView1); 

     MyCount counter = new MyCount(5000,1000); 
     counter.start(); 


    } 

    public class MyCount extends CountDownTimer{ 
     public MyCount(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
      } 

     iFallApp app1 = new iFallApp(); 

     @Override 
     public void onFinish() { 
      // TODO Auto-generated method stub 

      textView1.setText("done"); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      // TODO Auto-generated method stub 

      textView1.setText((int) (millisUntilFinished/1000)); 

     } 
    } 

} 
+0

정확히 어떻게 작동합니까? – harism

+0

응용 프로그램을 시작한 후 ... onTick 메서드에 문제가 있습니다 ... 응용 프로그램이 제대로 작동하는 경우 주석 처리하면됩니다 ... –

답변

10

이 줄이 문제의 원인입니다.

textView1.setText((int) (millisUntilFinished/1000)); 

당신이 찾고있는 것이 textView1의 리소스 ID로 설정되어 있습니다.

textView1.setText(Long.toString(millisUntilFinished/1000)); 

또한 줄;

 iFallApp app1 = new iFallApp(); 

다소 의심 스럽습니다. 우발적 인 사용으로 끝나기 전에 그것을 제거하십시오. 이미 Android 프레임 워크로 만든 iFallApp가 있으며 필요에 따라 this을 사용하여 전달할 수 있습니다.

0

일반적으로 당신은 잘못 무슨 일이 일어나고 있는지 확인하기 위해 adb logcat 출력을 볼 수 있어야합니다.

내 머리 꼭대기에서 나는 textView1 변수가 올바르게 설정되지 않았으며 null이라고 말할 수 있습니다.

또한 함수에서 카운트 다운 타이머를 시작하지만 onCreate() 함수는 시작하지 않습니다.

1

예를 들어, 다른 개발자가이 예제를 따르기는하지만 Timer를 자체 최상위 클래스로 추상화했습니다. TextView를 CountDownTimer 인스턴스에 전달하면 참조를 신중하게 정리하지 않으면 메모리 누수가 발생합니다. 이것은 화면을 여섯 번 회전시킨 후에 분명해질 것입니다. 내 애플리케이션이 OutOfMemoryError로 충돌합니다.

이와 같이 CountDownTimer에 메서드를 추가하고 소유 Activity/Fragment의 onDestroy()/onDestroyView()가 호출 될 때마다이 메서드를 호출하십시오.

public void safeCancel() { 
    this.textView1 = null; 
    super.cancel(); 
}