CountDownTimer - 如何从另一个方法而不是 Oncreate 方法开始
CountDownTimer - how to start from another method rather than Oncreate method
更新
我已经解决了这个问题,实际上我是从另一个 class 调用 newCountTimer,然后从我创建函数的 class 停止它。我尝试在相同 class 的 Oncreate 方法上调用 newCountTimer,它运行良好。我什至尝试从相同 class 的另一个方法调用此方法,它再次崩溃。所以,现在我的问题是如何从另一个方法启动这个方法,因为我只想在完成特定任务后显示计时器。
我已经实现了 CountDownTimer,之前我使用了 Timer,但那导致了更多问题,所以我将它更改为 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 Class 调用此计时器,使用此方法:-
new Play().newCountTimer();
我想在再次单击按钮时取消计时器,方法是:-
countdowntimer.cancel;
这是我得到的 Logcat :-
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)
我无法解决这个问题,请在这方面提供帮助。它们与我的应用程序中的计时器没有任何关系。
在 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()
}
问题已解决我将 CountDownTimer 创建为静态,它工作正常。
更新
我已经解决了这个问题,实际上我是从另一个 class 调用 newCountTimer,然后从我创建函数的 class 停止它。我尝试在相同 class 的 Oncreate 方法上调用 newCountTimer,它运行良好。我什至尝试从相同 class 的另一个方法调用此方法,它再次崩溃。所以,现在我的问题是如何从另一个方法启动这个方法,因为我只想在完成特定任务后显示计时器。
我已经实现了 CountDownTimer,之前我使用了 Timer,但那导致了更多问题,所以我将它更改为 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 Class 调用此计时器,使用此方法:-
new Play().newCountTimer();
我想在再次单击按钮时取消计时器,方法是:-
countdowntimer.cancel;
这是我得到的 Logcat :-
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)
我无法解决这个问题,请在这方面提供帮助。它们与我的应用程序中的计时器没有任何关系。
在 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()
}
问题已解决我将 CountDownTimer 创建为静态,它工作正常。