我正在尝试了解如何使用计时器。
在我的MainActivity.class中,在create方法的内部,我有这个代码
Timer timer = new Timer();
TimerTask updateM = new GestioneSlide();
timer.scheduleAtFixedRate(updateM , 1000, 5000); // i want to do a thing every second for 5 seconds
然后我有另一个类,我覆盖方法运行,我想在我的MainActivity.class中的texview中写东西
class GestioneSlide extends TimerTask {
@Override
public void run() {
MainActivity.TextViewName.setText("bla bla");
}
}
我的应用程序崩溃,如果我删除MainActivity.TextViewName.setText("bla bla");
我没有问题。可能我不能用那种方式写那个textview
我做错了什么?
答案 0 :(得分:1)
计时器不会在GUI线程中触发其操作。使用runOnUiThread切换到它。假设GestioneSlide是您的Activity的内部类,请写
class GestioneSlide extends TimerTask {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
MainActivity.TextViewName.setText("bla bla");
}
}
}
答案 1 :(得分:1)
制作一个处理程序并在处理程序中显示msg。
private class mainTask extends TimerTask
{
public void run()
{
toastHandler.sendEmptyMessage(0);
}
}
private final Handler toastHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT).show();
}
};