2013-12-15 111 views
1

問候語,如何在第二次打開活動後取消()計時器?

我創建了計時器以顯示特定時間的吐司。定時器在打開開關鍵後工作,一旦關閉開關鍵後定時器將被取消。我使用SharedPrefrences來保存切換視圖的狀態。一切工作正常,但是一旦我回到以前的活動並再次打開活動,然後嘗試通過關閉開關鍵取消計時器我得到強制關閉消息。那麼,你有什麼建議來解決這個問題?

驗證碼:

import java.util.Timer; 
import java.util.TimerTask; 
import android.app.Activity; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.CompoundButton; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.widget.Switch; 
import android.widget.Toast; 

public class AutoReminder extends Activity { 

    TimerTask tt; 
    Timer t; 
    Switch mySwitch; 
    SharedPreferences appPrefs; 

    String TAG; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_auto_reminder); 

     mySwitch = (Switch) findViewById(R.id.switch1); 

     appPrefs = getSharedPreferences("ishaqdev.app.hasanat",MODE_PRIVATE); 
     Boolean setSwitch = appPrefs.getBoolean("switchValue", false); 
     if (setSwitch == false){ 
      mySwitch.setChecked(false); 
     }else{ 
      mySwitch.setChecked(true); 
     } 


     mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 
       if (isChecked) {      
        SharedPreferences.Editor prefsEditor = appPrefs.edit(); 
        prefsEditor.putBoolean("switchValue", true); 
        prefsEditor.commit(); 

        tt = new TimerTask() 
        { 
         @Override 
         public void run() { 
          runOnUiThread(new Runnable() { 

           @Override 
           public void run() { 
            Toast.makeText(getApplicationContext(), "Hello Timer !!", Toast.LENGTH_SHORT).show(); 
           } 
          }); 
         }  
        }; 
        t = new Timer(); 

        t.schedule(tt,0,5000); 
       } else {      
        SharedPreferences.Editor prefsEditor = appPrefs.edit(); 
        prefsEditor.putBoolean("switchValue", false); 
        prefsEditor.commit(); 
        Log.v(TAG, "After SP"); 

        t.cancel(); 
        Log.v(TAG, "Final Step"); 
       } 
      } 
     }); 
    } 
} 

回答

0

你應該把堆棧跟蹤。通過猜測,我認爲計時器空,而你再次打開該活動,所以取消開關

if(t != null) 
    t.cancel(); 

希望它會幫助你把前一個空檢查這個樣子。

+0

是的確切的計時器是空的,這是問題,我試着你的建議,它不執行t.cancel();所以沒有強制關閉消息以及定時器仍在工作 那麼,解決方案是什麼? –

+0

@ user3104095首先告訴我,當你轉向上一個活動時,吐司仍然顯示正確嗎?如果是的話,那麼你是否想要這個功能,因爲當前面的活動,你可能不會顯示吐司?請讓我清楚。 –

+0

是的,它仍然顯示,我需要它繼續顯示,直到我通過切換鍵 –

相關問題