다음 코드를 사용하여 다음과 같은 결과가있는 diffirent 위치에서 실행 해 보았습니다. 1) on에 배치하면 60 초로 재설정됩니다. 2) 배치시 재생이 버튼을 다시 누를 때까지 onResume에서 그런 다음 마지막 onPause 위치에서 카운트 다운이 시작 완벽하게 작동하는 것 같다 playAgain 방법에 배치하는 경우 3)는CountDownTimer의 전역 변수가 변경되지 않습니다
코드 충돌 : createTimer 방법
public void createTimer(){
countDownTimer = new CountDownTimer(timeRemaining, 1000) {
@Override
public void onTick(long l) {
if (!isFinnish) {
timeRemaining = l;
} else {
timeRemaining = 63200;
}
countDownText.setText(String.valueOf(l/1000-60));
if (l <= 61000) {
timerTextView.setText(String.valueOf(l/1000) + "s");
button0.setEnabled(true);
button1.setEnabled(true);
button2.setEnabled(true);
button3.setEnabled(true);
button0.setVisibility(View.VISIBLE);
button1.setVisibility(View.VISIBLE);
button2.setVisibility(View.VISIBLE);
button3.setVisibility(View.VISIBLE);
sumTextView.setVisibility(View.VISIBLE);
countDownText.setVisibility(View.INVISIBLE);
}
if (l/1000 == 30){
if (MainActivity.mplayer7 != null) {
MainActivity.mplayer7.release();
MainActivity.mplayer7 = null;
}
MainActivity.mplayer7 = MediaPlayer.create(getApplicationContext(), R.raw.halfway);
if (MainActivity.muted == false) {
MainActivity.mplayer7.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer7.start();
}
if (l/1000 == 5){
if (MainActivity.mplayer != null) {
MainActivity.mplayer.release();
MainActivity.mplayer = null;
}
MainActivity.mplayer = MediaPlayer.create(getApplicationContext(), R.raw.ticktock);
if (MainActivity.muted == false) {
MainActivity.mplayer.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer.start();
}
}
@Override
public void onFinish() {
timerTextView.setText("0s");
timeRemaining = 63200;
isFinnish = true;
//Log.i("Score", String.valueOf(score));
//Log.i("Number of Questions", String.valueOf(numberOfQuestions));
//Log.i("Percentage", String.valueOf(percentage));
//resultTextView.setText("You scored: " + Integer.toString(score) + "/" + Integer.toString(numberOfQuestions));
if (score > 0) {
percentage = score * 100/numberOfQuestions;
}
else {
percentage = 0;
}
button0.setEnabled(false);
button1.setEnabled(false);
button2.setEnabled(false);
button3.setEnabled(false);
playAgainButton.setVisibility(View.VISIBLE);
returnToMenu.setVisibility(View.VISIBLE);
resultDisplayTextView.setVisibility(View.VISIBLE);
resultTextView.setText(" ");
if (percentage > 80) {
resultDisplayTextView.setText("Fantastic Score! " + Integer.toString(percentage) + "%");
if (MainActivity.mplayer3 != null) {
MainActivity.mplayer3.release();
MainActivity.mplayer3 = null;
}
MainActivity.mplayer3 = MediaPlayer.create(getApplicationContext(), R.raw.fireworks);
if (MainActivity.muted == false) {
MainActivity.mplayer3.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer3.start();
}
else if (percentage >= 60 && percentage < 80) {
resultDisplayTextView.setText("Great Score! " + Integer.toString(percentage) + "%");
}
else if (percentage >= 40 && percentage < 60) {
resultDisplayTextView.setText("Average Score! " + Integer.toString(percentage) + "%");
}
else if (percentage > 1 && percentage < 40) {
resultDisplayTextView.setText("Poor Score! " + Integer.toString(percentage) + "%");
if (MainActivity.mplayer4 != null) {
MainActivity.mplayer4.release();
MainActivity.mplayer4 = null;
}
MainActivity.mplayer4 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
if (MainActivity.muted == false) {
MainActivity.mplayer4.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer4.start();
}
else {
resultDisplayTextView.setText("You did not play?");
if (MainActivity.mplayer5 != null) {
MainActivity.mplayer5.release();
MainActivity.mplayer5 = null;
}
MainActivity.mplayer5 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
if (MainActivity.muted == false) {
MainActivity.mplayer5.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer5.start();
}
}
};
}
playAgain 방법
public void playAgain (View view) {
score = 0;
isFinnish = false;
numberOfQuestions = 0;
timerTextView.setText("60s");
pointsTextView.setText("0/0");
resultTextView.setText("");
playAgainButton.setVisibility(View.INVISIBLE);
returnToMenu.setVisibility(View.INVISIBLE);
resultDisplayTextView.setVisibility(View.INVISIBLE);
countDownText.setVisibility(View.VISIBLE);
button0.setVisibility(View.INVISIBLE);
button1.setVisibility(View.INVISIBLE);
button2.setVisibility(View.INVISIBLE);
button3.setVisibility(View.INVISIBLE);
sumTextView.setVisibility(View.INVISIBLE);
if (MainActivity.mplayer3 != null) {
MainActivity.mplayer3.release();
MainActivity.mplayer3 = null;
}
if (MainActivity.mplayer4 != null) {
MainActivity.mplayer4.release();
MainActivity.mplayer4 = null;
}
if (MainActivity.mplayer6 != null) {
MainActivity.mplayer6.release();
MainActivity.mplayer6 = null;
}
MainActivity.mplayer6 = MediaPlayer.create(getApplicationContext(), R.raw.countdown);
if (MainActivity.muted == false) {
MainActivity.mplayer6.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer6.start();
countDownTimer.start();
generateQuestion();
}
에서 onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
createTimer();
// THIS CODE IS TO ENABLE THE ICON IN THE TASKBAR ////////////////////
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);
//////////////////////////////////////////////////////////////////////
// SET IT TO ONLY POTRAIT VIEW
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Intent intent = getIntent();
countDownText = (TextView) findViewById(R.id.countDownText);
playAgainButton = (Button) findViewById(R.id.playAgainButton);
returnToMenu = (Button) findViewById(R.id.returnToMenu);
sumTextView = (TextView) findViewById(R.id.sumTextView);
resultTextView = (TextView) findViewById(R.id.resultTextView);
resultDisplayTextView = (TextView) findViewById(R.id.resultDisplayTextView);
pointsTextView = (TextView) findViewById(R.id.pointsTextView);
timerTextView = (TextView) findViewById(R.id.timerTextView);
linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);
button0 = (Button) findViewById(R.id.button0);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
MainActivity.mAdView = (AdView) findViewById(R.id.adView);
MainActivity.mplayer = MediaPlayer.create(getApplicationContext(), R.raw.ticktock);
MainActivity.mplayer1 = MediaPlayer.create(getApplicationContext(), R.raw.pop);
MainActivity.mplayer2 = MediaPlayer.create(getApplicationContext(), R.raw.wrong);
MainActivity.mplayer3 = MediaPlayer.create(getApplicationContext(), R.raw.fireworks);
MainActivity.mplayer4 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
MainActivity.mplayer5 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
MainActivity.mplayer6 = MediaPlayer.create(getApplicationContext(), R.raw.countdown);
MainActivity.mplayer7 = MediaPlayer.create(getApplicationContext(), R.raw.halfway);
if (MainActivity.muted == false) {
MainActivity.mplayer.setVolume(0.0f, 0.0f);
MainActivity.mplayer1.setVolume(0.0f, 0.0f);
MainActivity.mplayer2.setVolume(0.0f, 0.0f);
MainActivity.mplayer3.setVolume(0.0f, 0.0f);
MainActivity.mplayer4.setVolume(0.0f, 0.0f);
MainActivity.mplayer5.setVolume(0.0f, 0.0f);
MainActivity.mplayer6.setVolume(0.0f, 0.0f);
MainActivity.mplayer7.setVolume(0.0f, 0.0f);
}
MainActivity.displayAds();
mHandler.postDelayed(new Runnable() {
public void run() {
playAgain(playAgainButton);
}
}, 1000);
}
onResume과 onPause
@Override
public void onResume() {
super.onResume();
countDownTimer.start();
if (MainActivity.mAdView != null) {
MainActivity.mAdView.resume();
}
}
@Override
public void onPause() {
countDownTimer.cancel();
if (MainActivity.mAdView != null) {
MainActivity.mAdView.pause();
}
super.onPause();
}
I 글로벌 VAR 세트를 가지고 카운트 다운 타이머 내에서 onFinnish에 재설정하는 것은 그것을 그러나 그것을 재설정해야한다고 가정 하지 않습니다.
감사
어떤 예외가 발생합니까? – Antoniossss
null 포인터입니다. 이유는 createTimer() 전에 countDownTimer.start()를 호출했기 때문입니다. 나는 그것이 어디 있는지 생각하기 위해 놀고있다. createTimer()가 onResume에 있으면 all이 작동하지만 다시 재생할 때 timeRemaining = l 값을 유지합니다. –