ScoreNinja causes java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
I'm trying to add ScoreNinja, the global high score system, to my Android game, and it works fine when I load it on my phone, but when I release it into the wild, I got crash reports saying:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Here is part of the call stack:
android.os.Handler.<init>(Handler.java:121)
android.app.Dialog.<init>(Dialog.java:99)
android.app.AlertDialog.<init>(AlertDialog.java:65)
android.app.AlertDialog.<init>(AlertDialog.java:61)
android.app.AlertDialog$Builder.create(AlertDialog.java:797)
android.app.AlertDialog$Builder.show(AlertDialog.java:812)
com.scoreninja.adapter.ScoreNinjaAdapter.show(ScoreNinjaAdapter.java:136)
com.scoreninja.adapter.ScoreNinjaAdapter.show(ScoreNinjaAdapter.java:99)
I thought the main thread had prepare() called automatically, and if not, why would it wo开发者_如何学Gork fine for me but not anyone else?
I'm still not sure what was wrong, but for anyone who has the same problem, it works fine if you break up your game into a menu Activity and a game Activity. Have the game activity return a score to the menu activity on a game over, then call all the ScoreNinja stuff from the menu activity.
I imagine you're creating the handler outside of the main thread. Create the handler in the onCreate
of your activity or something similar, something that'll definitely be in the main thread, and then you can call handler.post(runnable)
inside your other thread.
精彩评论