无法在没有调用looper的线程内创建处理程序?

时间:2012-08-16 07:15:09

标签: java android

我想在5秒后发送通知。

我发现此代码示例在 5秒后执行某些操作,但我只能设置Log.e()
Notification方法也有效。但是,如果我想调用方法setNotification(),我会在 5秒后得到RuntimeError

  

无法在未调用looper.prepare()的Thread内创建Handler。

我找到了很多帮助,但没有任何作用。所以我希望你能帮助我。

public class Reminder {
    Timer timer;

    public Reminder(int seconds) {
        timer = new Timer();
        timer.schedule(new RemindTask(), seconds * 1000);
    }
}

class RemindTask extends TimerTask {
    public void run() { 
        todo_list rem = new todo_list();
        rem.setNotification("Todo!", false, 1);
    }
}

public class todo_list extends ListActivity {
    public void onCreate(Bundle savedInstanceState) {
        new Reminder(5);
    }

    public void setNotification(String text, boolean ongoing, int id) {}

}

2 个答案:

答案 0 :(得分:0)

您需要从一直保持运行的线程调用rem.setNotification。一种方法是使用runonuithread

runonUithread(new Runnable(){
    run(){
        rem.setNotification("Todo!",false,1);
    }
});

答案 1 :(得分:0)

当您执行一些不应在除UI线程之外的其他线程中完成的代码时,您将收到此错误。如此简单地获取一个活动对象并在其上调用runOnUiThread(Runnable action) {}。将生成错误的代码放在Runnable

我希望这会有所帮助。