当countDownTimer.cancel()
方法被调用时,我的计时器应用程序就崩溃了--它显示的是空对象引用,即使我正确地完成了它,我也找不到问题。拜托,有人,请看下面的代码:(我也在附加logcat)
由: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法‘voidandroid.os.CountDownTimer.cancel()’
package com.example.rajdeepkgautam.itimer;
import android.media.MediaPlayer;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int max = 600;
int start = 30;
TextView timerTextView;
SeekBar timerSeekBar;
boolean timerActive = false;
Button runButton;
CountDownTimer countDownTimer;
public void resetTimer() {
timerTextView.setText("0:30");
timerSeekBar.setProgress(start);
timerSeekBar.setEnabled(true);
countDownTimer.cancel();
runButton.setText("RUN!");
timerActive = false;
}
public void buttonClicked(View view) {
if(timerActive) {
resetTimer();
} else {
timerActive = true;
runButton.setText("STOP!");
timerSeekBar.setEnabled(false);
CountDownTimer countDownTimer = new CountDownTimer((timerSeekBar.getProgress()*1000) + 100, 1000) {
@Override
public void onTick(long l) {
TimerUpdate((int) l/1000);
}
@Override
public void onFinish() {
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.horn);
mediaPlayer.start();
resetTimer();
}
}.start();
}
}
public void TimerUpdate(int TimeLeft) {
int minutes = TimeLeft/60;
int seconds = TimeLeft - (minutes*60);
if(seconds <=9) {
timerTextView.setText(Integer.toString(minutes) + ":" + "0" + Integer.toString(seconds));
} else {
timerTextView.setText(Integer.toString(minutes) + ":" + Integer.toString(seconds));
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timerSeekBar = findViewById(R.id.timerSeekBar);
timerTextView = findViewById(R.id.timerTextView);
runButton = findViewById(R.id.runButton);
timerSeekBar.setMax(max);
timerSeekBar.setProgress(start);
timerSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
TimerUpdate(i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}
发布于 2020-07-20 22:02:00
这是因为没有初始化countDownTimer
。您正在创建一个局部变量,并且永远不会将实例化的CountDownTimer
分配给countDownTimer
of MainActivity
。
更改行文:
CountDownTimer countDownTimer = new CountDownTimer((timerSeekBar.getProgress()*1000) + 100, 1000)
至:
countDownTimer = new CountDownTimer((timerSeekBar.getProgress()*1000) + 100, 1000)
https://stackoverflow.com/questions/63008274
复制相似问题