2
我在“hello world”风格的应用中实现了一个简单的观察者模式。如何使用观察者更新我的UI?
我有2个按钮,在Service
上调用onStart()
和onDestroy()
。
在onStart()
我注册了一个观察者,然后让我的观察者运行一个循环调用observe.update()
,每秒一次,持续10秒。这又会在我的服务中调用update()
方法。
我想显示的获取返回一些虚拟的数据,但我发现了以下错误:
11-26 23:21:12.829: ERROR/AndroidRuntime(676): FATAL EXCEPTION: Thread-8
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.widget.Toast.<init>(Toast.java:68)
at android.widget.Toast.makeText(Toast.java:231)
at com.jameselsey.observerpattern.LocalService.observe(LocalService.java:27)
at obs.Stub$1.run(Stub.java:49)
at java.lang.Thread.run(Thread.java:1096)
我做我的服务如下:
public void observe(String message)
{
Context context = getApplicationContext();
Log.d("TEST", "Inside observe() on service, value is " + message);
Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.show();
}
经过一番研究,似乎我无法创建Toast消息,因为此方法不会在主UI线程上运行。
无论如何,我可以将message
吐出到我的用户界面上吗?我只是希望将它显示在活动上,即使是普通的textView也可以。
不要直接调用onStart()和onDestroy()。这是非常糟糕的。 – Falmarri 2010-11-27 00:20:46