2017-10-17 1 views
0

업데이트 내가 문제를 낸CountDownTimer - 다른 방법보다는 한 OnCreate 방법

, 실제로 내가 함수를 만든 클래스에서을을 stoping 다음 다른 클래스에서 newCountTimer를 호출 한에서 시작하는 방법에 대해 설명합니다. 같은 클래스의 Oncreate 메서드에서 newCountTimer를 호출하려고 시도했지만 완벽하게 작동했습니다. 나는 심지어 같은 클래스의 다른 메소드에서이 메소드를 호출하려고 시도했다. 다시 충돌했다. 이제는 특정 작업이 완료된 후에 타이머를 보여 주기만하면되므로 다른 방법으로이 메서드를 시작하는 방법에 대한 이슈가되었습니다.

나는 CountDownTimer를 구현 한

는, 이전의 나는 타이머를 사용하지만, 더 많은 문제를 일으키는, 그래서 때문에 단순성 CountDownTimer로 변경하고 내가 타이머, 응용 프로그램 충돌을 중지하고 응용 프로그램을 다시 시작하려고하면. 나는 틀린 것이 무엇인지 알아낼 수 없다.

public void newCountTimer(){ 
    countdowntimer = new CountDownTimer(21600000,1000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      long time = 21600000 - millisUntilFinished; 
      sec = (time/1000)%60; 

      if (sec == 0){ 
       min++; 
       if (min > 59){ 
        min = 0; 
        hour++; 
       } 
      } 
      if (sec < 10) { 
       if (min < 10) { 
        if (hour < 10) { 
         timer_box.setText("0" + hour + ":0" + min + ":0" + sec); 
        } else { 
         timer_box.setText("" + hour + ":0" + min + ":0" + sec); 
        } 
       } else { 
        if (hour < 10) { 
         timer_box.setText("0" + hour + ":" + min + ":0" + sec); 
        } else { 
         timer_box.setText("" + hour + ":" + min + ":0" + sec); 
        } 
       } 
      } else { 
       if (min < 10) { 
        if (hour < 10) { 
         timer_box.setText("0" + hour + ":0" + min + ":" + sec); 
        } else { 
         timer_box.setText("" + hour + ":0" + min + ":" + sec); 
        } 
       } else { 
        if (hour < 10) { 
         timer_box.setText("0" + hour + ":" + min + ":" + sec); 
        } else { 
         timer_box.setText("" + hour + ":" + min + ":" + sec); 
        } 
       } 
      } 
     } 

     @Override 
     public void onFinish() { 
      timer_box.setVisibility(View.INVISIBLE); 
     } 
    }.start(); 
} 

나는이 방법을 사용하여, 내 다른 AsyncTask를 클래스에서이 타이머를 호출 오전 : - - : 여기 코드는

new Play().newCountTimer(); 

내가 사용하는 버튼의 또 다른 클릭에 타이머를 취소하려면 : -

countdowntimer.cancel; 

여기에 내가 점점 오전 로그 캣는 다음과 같습니다 -

       Process: com.ravibhardwaj.kbcmaster, PID: 17569 
                     java.lang.IllegalStateException: Could not execute method for android:onClick 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                      at android.view.View.performClick(View.java:5647) 
                      at android.view.View$PerformClick.run(View.java:22465) 
                      at android.os.Handler.handleCallback(Handler.java:761) 
                      at android.os.Handler.dispatchMessage(Handler.java:98) 
                      at android.os.Looper.loop(Looper.java:156) 
                      at android.app.ActivityThread.main(ActivityThread.java:6577) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 
                     Caused by: java.lang.reflect.InvocationTargetException 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                      at android.view.View.performClick(View.java:5647)  
                      at android.view.View$PerformClick.run(View.java:22465)  
                      at android.os.Handler.handleCallback(Handler.java:761)  
                      at android.os.Handler.dispatchMessage(Handler.java:98)  
                      at android.os.Looper.loop(Looper.java:156)  
                      at android.app.ActivityThread.main(ActivityThread.java:6577)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)  
                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.CountDownTimer.cancel()' on a null object reference 
                      at com.ravibhardwaj.kbcmaster.Play.lockOption(Play.java:547) 
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                      at android.view.View.performClick(View.java:5647)  
                      at android.view.View$PerformClick.run(View.java:22465)  
                      at android.os.Handler.handleCallback(Handler.java:761)  
                      at android.os.Handler.dispatchMessage(Handler.java:98)  
                      at android.os.Looper.loop(Looper.java:156)  
                      at android.app.ActivityThread.main(ActivityThread.java:6577)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)  
,536,913,632 10

이 문제를 해결할 수 없으므로이 점에 대해 도움을주십시오. 그들은 어쨌든 내 응용 프로그램의 타이머와 관련이 없습니다.

+0

newCountTimer()가 countdowntimer.cancel()보다 먼저 호출 했습니까? – nhoxbypass

+0

예, 새로운 활동이 생성되면 newCountTimer는 –

+0

이라고 불립니다. 어떻게 NullPointerException이 발생할 수 있습니까? – nhoxbypass

답변

0

onCreate()CountDownTimer을 만들고 원하는 위치에서 CountDownTimer을 시작하십시오.

CountDownTimer countDownTimer; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     countDownTimer = new CountDownTimer(10000,1000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 

      } 

      @Override 
      public void onFinish() { 

      } 
     }; 
    } 
    public void anotherFunction(){ 
     countDownTimer.start() 
    } 
+0

여전히 깨지고있다 –

+0

문제는 다른 클래스, 내 asynctask 클래스에서 시작하고 싶습니다. –

0

문제가 해결되었습니다. 정적으로 CountDownTimer를 만들었고 정상적으로 작동했습니다.