Я реализовал простой шаблон Observer в приложении в стиле «hello world».
У меня есть 2 кнопки, которые вызывают onStart()
и onDestroy()
для Service
.
В 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();
}
После небольшого исследования кажется, что я не могу создать сообщение Toast, так как этот метод не работает в основном потоке пользовательского интерфейса.
Могу ли я в любом случае выплюнуть message
на свой интерфейс?Я просто смотрю, чтобы он отображался на активности, даже обычный textView в порядке.