我想在计时器中显示toast消息,我使用了以下代码:
timer.scheduleAtFixedRate( new TimerTask()
{
public void run()
{
try {
fun1();
} catch (Exception e) {e.printStackTrace(); }
}
}, 0,60000);
public void fun1()
{
//want to display toast
}
我收到以下错误:
WARN / System.err(593):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序WARN / System.err(593):at android.os.Handler . (Handler .java:121)WARN / System.err(593):在android.widget.Toast . (Toast.java:68)WARN / System.err(593):在android.widget.Toast.makeText(Toast.java: 231)
谢谢 .
7 回答
您不能在单独的Thread内部进行UI更新,例如Timer . 您应该使用Handler对象进行UI更新:
最简单的方法(IMO)是:
关键是MyActivity.this.runOnUiThread(Runnable) .
你必须打电话给UIThread来展示Toast . 不是来自计时器线程 .
else从该计时器线程调用UI线程 .
这个链接可以帮到你,
http://developer.android.com/resources/articles/timed-ui-updates.html
还有这个
http://developer.android.com/guide/appendix/faq/commontasks.html#threading
谢谢 .
创建
Handler
并在此显示吐司您需要访问应用程序的上下文才能执行此操作 . 尝试创建自己的类,将上下文作为输入参数:
然后在你的计时器:
我想制作一个可以在计时器中显示Toast的简单项目 . Timer将使用服务启动 . 然后,Timer在服务启动时启动,在服务停止时停止 .
1级
2级
3级
我正试图用我自己的观点做自己的祝酒 .
我成功地结合了你的方法 . 以下代码允许我显示toast并更改/删除视图而不会崩溃,只需将
MyTimerTask
构造函数的参数更改为您需要处理的任何内容 .