2016-07-25 9 views
0

私は以下のようなクラスを持っていると仮定します。まずCountDownTimerが公開されていますが、今はnullです。CountDownTimerを開始する方法はstartCountDownTimerです。countdowntimerを設定する方法はstartCountDownTimerですが、後でボタンをクリックしてキャンセルする場合はキャンセルしますパブリックスコープとnullに変数を作成しました。メソッドの外でCountDownTimerをキャンセルしようとすると、NullPointerExceptionが発生するので、どうすればCountDownTimerをキャンセルできますか? (私は公共のスコープで私のCountDownTimerのすべてを作成したいいけない。)CountDownTimerをメソッド外でキャンセルするにはどうすればよいですか?

public class test { 

    CountDownTimer countdowntimer; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     startCountDownTimer(); 
    } 

    void startCountDowntimer(){ 

     countdowntimer = new CountDownTimer(10000, 1) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       minText.setText(formatTimeMinutes(millisUntilFinished)); 
       secondsText.setText(formatTimeSeconds(millisUntilFinished));    
      } 

      @Override 
      public void onFinish() { 
       Toast.makeText(this,"Timer Finished",Toast.LENGTH_LONG).show(); 
      } 
     }.start(); 

    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     countdowntimer.cancel(); 
    }  
} 
+0

初心者にはわかりませんが、*してください。*問題文を句読点を使ってわかりやすい文章に置き換えてください。 – lenz

+0

大文字と小文字の空白 – jwvh

答えて

0

ブール値を使用してこの問題に取り組んでみてください。

countdowntimer.cancel()を呼び出すときにNullPointerExceptionが発生し、countdowntimerが初期化されていません。したがって、countdowntimerが初期化されていない限り、そのコード行を実行できないようにしましょう。

countdowntimer宣言の後にグローバルブール値を宣言します。

Boolean timerOn = false;

は今、あなたの startCountdownTimer()メソッドの内部で、あなたはタイマーを開始した直後、 truetimerOnブール値を設定します。あなたの onBackPressed()メソッド内

は、これであなたのコードを置き換える:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    if (timerOn) { 
     countdowntimer.cancel(); 
     timerOn = false; 
    } 
} 

timerOnブールは、タイマーが初期化されるときにのみ発生しますこれは、真のときにこれが.cancelメソッドのみが実行されていることを確認します。

関連する問題