2012-01-05 41 views
0

我有一個應用程序,它具有兩個彼此獨立運行的計時器。我有一個計時器在自己的工作正常,但是當我添加第二個我開始得到一個奇怪的錯誤。在一個有兩個定時器的Android程序中,我得到一個奇怪的錯誤,但沒有發現另一個 - 代碼似乎是相同的

該應用程序旨在工作,以便如果按下Jammer計時器旁邊的Start按鈕,它將開始倒計時;如果按下Blocker 1定時器旁邊的Start按鈕,它將開始倒計時。

但是,如果按下Jammer計時器旁邊的按鈕,它將顯示0.如果再次按下相同的按鈕,Blocker 1計時器將開始正確倒計時。如果任何人有任何想法可能會導致此它會非常感激(反向不一樣,如果要攔截器1旁邊的按鈕被按下兩次發生)

public void onClick(View v) { 
    switch (v.getId()){ 

    case R.id.buttonStartJammer: 
     toggleTimer(0); 
     break; 

    case R.id.buttonStartBlocker1: 
     toggleTimer(1); 
     break; 
    } 

} 

private void toggleTimer(final int timer){ 
    switch(timer){ 
    case 0: 
    { 
     if (jammerTimerRunning) { 
     jammerTimer.cancel(); 
     bStartJammer.setText(getResources().getString(R.string.start)); 
     } else if (jammerTimerDone){ 
      //stuff 
     } else { 
     jammerTimer = newTimer(jammerSeconds, 0); 
     jammerTimer.start(); 
     jammerTimerRunning = true; 
     break; 
     } 
    } 
    case 1: 
     if(blocker1TimerRunning){ 
      blocker1Timer.cancel(); 
      bStartBlocker1.setText(getResources().getString(R.string.start)); 
     } else if (blocker1TimerDone) { 
      //stuff 
     } else { 
      blocker1Timer = newTimer(blocker1Seconds, 1); 
      blocker1Timer.start(); 
      blocker1TimerRunning = true; 
      break; 
     } 
    } 

private CountDownTimer newTimer(long seconds, final int timer) { 
    long milliseconds = seconds * 1000; 
    return new CountDownTimer(milliseconds,1000) { 

     @Override 
     public void onFinish() { 
      switch(timer){ 
      case 0: 
      { 
       jammerTimerRunning = false; 
       jammerTimerDone = true; 
       tvJammerTimer.setText(String.format("%d",0)); 
       jammerSeconds = 59; 
       break; 
      } 
      case 1: 
      { 
       blocker1TimerRunning = false; 
       blocker1TimerDone = true; 
       tvBlocker1Timer.setText(String.format("%d",0)); 
       blocker1Seconds = 59; 
       break; 
      } 
      } 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      switch(timer){ 
      case 0: 
      { 
       jammerSeconds = (millisUntilFinished/1000); 
       tvJammerTimer.setText(String.format("%d",jammerSeconds)); 
       break; 
      } 
      case 1: 
      { 
       blocker1Seconds = (millisUntilFinished/1000); 
       tvBlocker1Timer.setText(String.format("%d",blocker1Seconds)); 
       break; 
      } 
      }  
     } 


    }; 
} 

+1

我懷疑的newTimer方法。我會考慮創建單獨的定時器,而不是在一個定時器內進行切換。不過,這可能不是問題。此外,我只是普遍懷疑我寫的任何東西;) – 2012-01-06 01:31:24

+0

我會嘗試,再次感謝您抽出時間幫助 - 我真的很感激它:) – Eilidh 2012-01-06 12:17:38

回答

0

我發現了這個問題。我改變了程序,爲每個計時器提供完全不同的方法,而不是開關語句,但這沒有效果。

我決定添加blocker2(使用相同的方法等)來查看這是否有效 - 並且效果是Jammer和Blocker1計時器在blocker2工作時立即將其自己設置爲0。我注意到這是在CountDownTimer上設置完成的文本,並且在通過更改文本進行測試時發現這種情況。

我最終發現這個問題實際上是我錯誤地錯誤地初始化了幾個變量。在格式

我宣佈幾個變量 -

private boolean variable1, variable2, variable3 = false; 

這意味着只有variable3被設置爲正確的值。

我本來打算做的是設置它們的格式 -

private boolean variable1 = variable2 = variable3 = false; 

在C++,但是我得到一個錯誤,當我試圖做到這一點在Java中(其中,我更不熟悉),所以我定居聲明爲 -

private boolean variable1 = false; 
private boolean variable2 = false; 
private boolean variable3 = false; 

它現在正在按預期:)

相關問題