ScoreNinja causes java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

11,505

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.

Share:
11,505
cstack
Author by

cstack

Computer Science student at the University of Michigan - Ann Arbor. I like web development and mobile apps. I also like to juggle and rock climb.

Updated on June 05, 2022

Comments

  • cstack
    cstack almost 2 years

    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 work fine for me but not anyone else?