当前位置: 首页 > 知识库问答 >
问题:

countdowntimer.cancel()被调用后,应用程序立即崩溃

孔运良
2023-03-14

一调用CountDownTimer.Cancel()方法,我的计时器应用程序就崩溃了,它显示的对象引用为空,尽管我做得正确,但我找不到问题。请,某人,看看下面的代码:(我也附上logcat)

原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.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) {

        }
    });

}
}

共有1个答案

范霄
2023-03-14

这是因为没有初始化countdowntimer。您正在创建一个局部变量,但从未将实例化的CountDownTimer分配给MainActivityCountDownTimer

更改行:

CountDownTimer countDownTimer = new CountDownTimer((timerSeekBar.getProgress()*1000) + 100, 1000)

致:

countDownTimer = new CountDownTimer((timerSeekBar.getProgress()*1000) + 100, 1000)
 类似资料:
  • 我试图弄清楚为什么我正在开发的应用程序在我的设备上运行时立即开始崩溃(运行iOS6.1的苹果4)。我已经在这个应用程序上工作了大约8周,这个问题似乎是突然出现的。 当我在模拟器上运行应用程序时,它运行良好。当我尝试在我的设备上运行它时,它会崩溃,并在以下位置中断: 崩溃发生在App委托方法之前 有人打电话来。 我已经看过了设备崩溃日志,但我没有看到任何关于发生了什么的线索。有人知道我可以从哪里开始

  • 经过一些调试,我找到了这行代码 导致我的应用程序崩溃,我已经尝试过了 ; 但结果还是一样,有什么帮助吗??

  • 如果被其他应用程序调用,我的自定义相机应用程序会崩溃。 例如,我的相机是由我的音轨调用的。如果你按下我音轨的相机图标,它会弹出并让用户选择要使用的相机。我试过使用我的相机,但它崩溃了。但是如果我从应用程序菜单中单击相机,我的相机就可以正常工作。 AndroidManifest.xml 我的方法: 日志猫: 相机活动: 这是我的启动器,当我的应用程序启动时首先调用它: 我主要活动的一部分 @Over

  • 我在我的工作区中使用STS IDE运行了几个Spring Boot应用程序,在我对其中一个项目进行maven更新后,每个项目都在应用程序启动过程后立即停止。我甚至创建了一个最小的例子,只是为了开始一些事情,同样的事情发生了。 这是我的pom.xml 即使是那些入门示例也会在启动后立即停止。我会非常感谢这里的一些帮助。 编辑:正如Alexandru Marina在评论中所说,我使用的是快照而不是稳定