我有计时器,每1秒安排一次,因为我们不能在timertask中干杯,所以我使用了handler.post()。但是这段代码打破了我的应用程序:
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 :(得分:1)
目前您正在null
中传递Toast.makeText
作为上传。只需传递上下文而不是null来显示吐司
Toast.makeText(Your_Activity.this, "qwerty", Toast.LENGTH_LONG).show();
并显示Toast或从timertask run方法访问UI元素使用runOnUiThread()作为
public void run() {
Current_Activity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
//show your toast here
}
});
}
答案 1 :(得分:0)
改变干杯
Toast.makeText(getApplicationContext(),“qwerty”,Toast.LENGTH_LONG)。show();
然后添加 @override注释位于处理程序
中的void run之上