如何在定时器内显示toast?
我想在计时器内显示 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() 的线程内创建处理程序
警告/System.err(593):位于 android.os.Handler.(Handler.java:121)
警告/System.err(593):位于 android.widget.Toast.(Toast.java:68)
警告/System.err(593):位于 android.widget.Toast.makeText(Toast.java:231)
谢谢。
I want to display toast message inside timer and I used the following code :
timer.scheduleAtFixedRate( new TimerTask()
{
public void run()
{
try {
fun1();
} catch (Exception e) {e.printStackTrace(); }
}
}, 0,60000);
public void fun1()
{
//want to display toast
}
And I am getting following error:
WARN/System.err(593): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
WARN/System.err(593): at android.os.Handler.(Handler.java:121)
WARN/System.err(593): at android.widget.Toast.(Toast.java:68)
WARN/System.err(593): at android.widget.Toast.makeText(Toast.java:231)
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您无法在单独的线程内进行 UI 更新,例如计时器。您应该使用 Handler 对象进行 UI 更新:
You can't make UI updates inside separate Thread, like Timer. You should use Handler object for UI update:
最简单的方法(IMO)是:
关键是 MyActivity.this.runOnUiThread(Runnable)。
The easiest way (IMO) is:
The key being MyActivity.this.runOnUiThread(Runnable).
创建一个
Handler
并在其中显示 toastcreate a
Handler
and display toast in this您需要访问应用程序的上下文才能执行此操作。尝试创建您自己的类,它将上下文作为输入参数:
然后在您的计时器中:
You need access to the Context of the application to be able to do this. Try creating your own class which takes the context as input parameter:
Then in your timer:
我想做一个简单的项目,可以在计时器中显示 Toast。
计时器将使用服务启动。然后,定时器在服务启动时启动,在服务停止时停止。
1 级
2 级
3 级
I wanted to make a simple project that could display a Toast in a Timer.
The Timer would be started using a service. Then, the Timer starts when the service is started and stops when service is stopped.
Class 1
Class 2
Class 3
我正在尝试用我自己的观点来祝酒。
我已经成功地结合了你们的方法。以下代码允许我显示 toast 并更改/删除视图而不会崩溃,只需将
MyTimerTask
构造函数的参数更改为您需要处理的任何内容即可。I'm trying to make my own toast with my own views.
I've successfully combined your approaches. The following code allows me to show toasts and change/remove views without crashing, just change the parameters of the
MyTimerTask
constructor to whatever you need to work on.您必须调用 UIThread 来显示 Toast,而不是从计时器线程调用。
否则从该计时器线程调用 UI 线程。
此链接将为您提供帮助,
http://developer.android.com/ resources/articles/timed-ui-updates.html
和这个
http://developer.android.com/guide/appendix/faq/commontasks.html#threading
You have to call UIThread for showing Toast, not from timer thread.
Else call UI thread from that timer thread.
This link will help you,
http://developer.android.com/resources/articles/timed-ui-updates.html
and this
http://developer.android.com/guide/appendix/faq/commontasks.html#threading