首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >countDownTimer.cancel()一被调用,应用程序就崩溃了

countDownTimer.cancel()一被调用,应用程序就崩溃了
EN

Stack Overflow用户
提问于 2020-07-20 21:59:14
回答 1查看 66关注 0票数 0

countDownTimer.cancel()方法被调用时,我的计时器应用程序就崩溃了--它显示的是空对象引用,即使我正确地完成了它,我也找不到问题。拜托,有人,请看下面的代码:(我也在附加logcat)

由: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法‘voidandroid.os.CountDownTimer.cancel()’

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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) {

        }
    });

}
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-20 22:02:00

这是因为没有初始化countDownTimer。您正在创建一个局部变量,并且永远不会将实例化的CountDownTimer分配给countDownTimer of MainActivity

更改行文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CountDownTimer countDownTimer = new CountDownTimer((timerSeekBar.getProgress()*1000) + 100, 1000)

至:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
countDownTimer = new CountDownTimer((timerSeekBar.getProgress()*1000) + 100, 1000)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63008274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文