首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务Android调用toast时出错

从服务Android调用toast时出错
EN

Stack Overflow用户
提问于 2012-09-19 15:45:46
回答 1查看 7.8K关注 0票数 8

可能重复: Android Toast started from Service only displays once

我使用的是在android.app.Service中定义的服务机器人。

我从一个活动中调用这个服务(myService)。

MyService是:

代码语言:javascript
复制
public class myService extends Service{

 public IBinder onBind(Intent intent){
    return null;
}

public void onCreate(){
    super.onCreate();
    TimerTask task = new TimerTask(){
        public void run(){
            Log.i("test","service running");
            checkDate();            
        }           
    };
    timer = new Timer();
    timer.schedule(task, 0, 20000);
}

 public void checkDate(){
    Toast toast = Toast.makeText(this, "SIMPLE MESSAGE!", Toast.LENGTH_LONG);
    toast.show();
}

}

方法checkDate()驻留在类myService中。

产生的错误是:

代码语言:javascript
复制
 09-19 15:41:35.267: E/AndroidRuntime(2026): FATAL EXCEPTION: Timer-0
 09-19 15:41:35.267: E/AndroidRuntime(2026): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
 09-19 15:41:35.267: E/AndroidRuntime(2026):    at android.os.Handler.<init>(Handler.java:121)
 09-19 15:41:35.267: E/AndroidRuntime(2026):    at android.widget.Toast$TN.<init>(Toast.java:310)
 09-19 15:41:35.267: E/AndroidRuntime(2026):    at android.widget.Toast.<init>(Toast.java:84)
 09-19 15:41:35.267: E/AndroidRuntime(2026):    at android.widget.Toast.makeText(Toast.java:226)
EN

回答 1

Stack Overflow用户

发布于 2012-09-19 15:54:17

你是从一个工作线程调用它的。您需要在主线程中调用Toast.makeText() (以及处理UI的大多数其他函数)。例如,您可以使用处理程序。

你需要打电话给Toast.makeText(.)在UI线程中:

代码语言:javascript
复制
activity.runOnUiThread(new Runnable() {
  public void run() {
    Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
  }
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12498226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档