"hello world"スタイルのアプリで単純なObserverパターンを実装しました。オブザーバーを使用してUIを更新するにはどうすればよいですか?
Service
にはonStart()
とonDestroy()
という2つのボタンがあります。
onStart()
私はオブザーバーを登録し、オブザーバーにforループを実行して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();
}
少しの研究の後、このメソッドはメインのUIスレッドでは実行されないため、Toastメッセージを作成できないようです。
私のUIにmessage
を吐き出すことができますか?私はそれをactivitiyに表示させたいだけで、通常のtextViewでもOKです。
onStart()とonDestroy()を直接呼び出さないでください。それは信じられないほど悪いです。 – Falmarri
こんにちはFalmarri、私は、アクティビティのメソッドにマップされている2つのボタンがあり、それらのアクティビティはonStart/onDestroyを呼び出します。それでも悪いですか?何が最高ですか?.. – Jimmy