2014-01-29 2 views
0

У меня есть Android-приложение, которое является основным таймером с двумя кнопками, запуска и остановки. Всякий раз, когда я дважды нажимаю кнопку «Стоп», приложение вылетает с исключительным исключением.Android Timer - Java Null Pointer Exception

Метод в вопросе:

public void stopTimer(View view) { 
timerTask.cancel(); 
timerTask = null; 
n = 0; 
} 

Logcat следующим образом:

01-27 20:43:01.173: E/dalvikvm(14195): could not disable core file generation for pid 
14195: Operation not permitted 
01-27 20:43:32.455: D/AndroidRuntime(14195): Shutting down VM 
01-27 20:43:32.455: W/dalvikvm(14195): threadid=1: thread exiting with uncaught exception (group=0x40018560) 
01-27 20:43:32.478: E/AndroidRuntime(14195): FATAL EXCEPTION: main 
01-27 20:43:32.478: E/AndroidRuntime(14195): java.lang.IllegalStateException: Could not execute method of the activity 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.view.View$1.onClick(View.java:2144) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.view.View.performClick(View.java:2485) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.view.View$PerformClick.run(View.java:9089) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.os.Handler.handleCallback(Handler.java:587) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.os.Looper.loop(Looper.java:123) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.app.ActivityThread.main(ActivityThread.java:3806) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at java.lang.reflect.Method.invokeNative(Native Method) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at java.lang.reflect.Method.invoke(Method.java:507) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at dalvik.system.NativeStart.main(Native Method) 
01-27 20:43:32.478: E/AndroidRuntime(14195): Caused by: java.lang.reflect.InvocationTargetException 
01-27 20:43:32.478: E/AndroidRuntime(14195): at java.lang.reflect.Method.invokeNative(Native Method) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at java.lang.reflect.Method.invoke(Method.java:507) 
01-27 20:43:32.478: E/AndroidRuntime(14195): at android.view.View$1.onClick(View.java:2139) 
01-27 20:43:32.478: E/AndroidRuntime(14195): ... 11 more 
01-27 20:43:32.478: E/AndroidRuntime(14195): Caused by: java.lang.NullPointerException 
01-27 20:43:32.478: E/AndroidRuntime(14195): at com.example.timer.MainActivity.stopTimer(MainActivity.java:56) 
01-27 20:43:32.478: E/AndroidRuntime(14195): ... 14 more 
01-27 20:43:35.564: I/Process(14195): Sending signal. PID: 14195 SIG: 9 
01-27 20:48:05.103: D/dalvikvm(14263): GC_EXPLICIT freed 75K, 51% free 2682K/5379K, external 2357K/2773K, paused 23ms 

Что я могу сделать так, что если пользователь происходит нажать на кнопку два раза подряд, приложение не будет рушиться на них? Как бы то ни было, если они нажимают стоп после того, как значение int все еще отображается. Может быть, если остановка была нажата снова, она могла бы сбрасываться на 0?

Благодарим вас за любые советы/отзывы.

+0

'если (TimerTask! = NULL) {// то, что у вас уже есть}'? Вторая часть о том, что int не перезагружается, звучит как отдельная проблема, когда значение не обновляется в пользовательском интерфейсе. – turbo

ответ

2

Похоже, вы должны проверить, чтобы убедиться, что timerTask не равно нулю перед вызовом timerTask.cancel();

if (timerTask != null){ 
    timerTask.cancel(); 
    timerTask = null; 
} 
0

timerTask есть null второй раз. Вы можете просто проверить, если это уже не пустой:

public void stopTimer(View view) { 
    if (timerTask != null) { 
     timerTask.cancel(); 
     timerTask = null; 
    } 
    n = 0; 
} 

Или вы можете отключить/скрыть кнопку, чтобы запретить пользователю, нажав дважды (или применять как в качестве проверки на нуль всегда хорошая привычка).