2013-01-20 38 views
0

我有計時器每個1秒計劃,因爲我們不能在timertask中敬酒我使用了handler.post()。但這段代碼打破了我的應用程序:Handler runnable break應用程序

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game); 

    handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      String text = (String) msg.obj; 
      sec_view.setText(text); 
     } 
    }; 

    MyTimerTask myTask = new MyTimerTask(); 
    timer = new Timer(); 
    timer.schedule(myTask, 1000, 1000); 
} 

Runnable makeToast = new Runnable() { 
    public void run() { 
     Toast.makeText(null, "qwerty", Toast.LENGTH_LONG).show(); 
    } 
}; 


class MyTimerTask extends TimerTask { 
    public void run(){ 
     if(0 == --sec){ 
      handler.post(makeToast); //breaks there 
      timer.cancel(); 
     } 
     Message msg = new Message(); 
     msg.obj = sec+" sekund"; 
     handler.sendMessage(msg); 
    } 
} 

我可以使用其他任何東西來從timertask敬酒?

+0

如果你想在這裏幫助定義「破發」,後相關的logcat。 – 323go

回答

1

目前你逝去的null的語境中Toast.makeText。只是通過上下文而不是空,顯示敬酒

Toast.makeText(Your_Activity.this, "qwerty", Toast.LENGTH_LONG).show(); 

,並顯示出從TimerTask的run方法使用runOnUiThread()吐司或訪問UI元素

public void run() { 
    Current_Activity.this.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
      //show your toast here 
     } 
    }); 
} 
0

更改烤麪包到

Toast.makeText(getApplicationContext(),「qwerty」,Toast.LENGTH_LO NG).show();

再加入 @Override批註無效上方運行在處理器

相關問題