J'ai implémenté un simple pattern Observer dans une application de style "hello world". J'ai 2 boutons, qui appellent onStart()
et onDestroy()
sur un Service
.Comment puis-je mettre à jour mon interface utilisateur à l'aide d'un observateur?
Dans le onStart()
, j'inscris un observateur et j'obtiens mon observateur pour lancer une boucle for appelant observe.update()
une fois par seconde pendant 10 secondes. Cela appelle à son tour une méthode update()
dans mon service.
Je suis en train d'afficher certaines données fictives qui est renvoyée, mais je reçois l'erreur suivante:
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)
que je fais ce qui suit dans mon service:
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();
}
Après un peu de recherche, il semble que je ne puisse pas créer un message Toast car cette méthode ne fonctionne pas sur le thread principal de l'interface utilisateur.
Y at-il de toute façon je peux cracher message
sur mon interface utilisateur? Je cherche juste à l'afficher sur l'activité, même un textView normal est OK.
N'appelez pas onStart() et onDestroy() directement. C'est incroyablement mauvais. – Falmarri
Salut Falmarri, J'ai 2 boutons qui sont mappés sur des méthodes dans une activité, ces activités appellent onStart/onDestroy. Est-ce encore mal? Quel est le meilleur? .. – Jimmy