2017-10-17 14 views
0

Mise à jourCountDownTimer - comment commencer d'une autre méthode plutôt que la méthode onCreate

J'ai compris la question, en fait je l'appelais le newCountTimer d'une autre classe et stoping ensuite de la classe I fait la fonction. J'ai essayé d'appeler newCountTimer sur Oncreate méthode de même classe et cela a fonctionné parfaitement. J'ai même essayé d'appeler cette méthode à partir d'une autre méthode de même classe, elle s'est à nouveau écrasée. Donc, maintenant mon problème est de savoir comment démarrer cette méthode à partir d'une autre méthode, car je veux seulement montrer le minuteur après qu'une tâche particulière est faite.


J'ai mis en place un CountDownTimer, plus tôt, j'utilisé minuterie mais était à l'origine plus question, donc je l'ai changé à CountDownTimer en raison de la simplicité et lorsque je tente d'arrêter le chronomètre, les application se bloque et redémarrer l'application. Je ne suis pas capable de comprendre ce qui ne va pas. Voici le code: -

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(); 
} 

J'appelle cette minuterie de mon autre classe AsyncTask, en utilisant cette méthode: -

new Play().newCountTimer(); 

et je veux annuler la minuterie sur un autre clic de bouton à l'aide: -

countdowntimer.cancel; 

Voici le Logcat que je reçois: -

       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)  

Je ne suis pas en mesure de résoudre ce problème, s'il vous plaît aider à cet égard. Leur est rien de plus lié à minuterie dans mon application.

+0

Etes-vous sûr que newCountTimer() est appelé avant countdowntimer.cancel()? – nhoxbypass

+0

oui, quand une nouvelle activité est créée, newCountTimer est appelé –

+0

Alors, comment peut-il causer NullPointerException ... – nhoxbypass

Répondre

0

Créez votre CountDownTimer en onCreate() et démarrez votre CountDownTimer où vous le souhaitez.

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

encore il plantage –

+0

le problème est que je veux le démarrer à partir d'une autre classe, ma classe asynctask –

0

Problème résolu J'ai créé le CountDownTimer comme statique et cela a fonctionné correctement.