代码之家  ›  专栏  ›  技术社区  ›  cstack

ScoreNinja导致java.lang.RuntimeException:无法在未调用looper.prepare()的线程内创建处理程序

  •  2
  • cstack  · 技术社区  · 14 年前

    我正在尝试将ScoreNinja(全球高分系统)添加到我的Android游戏中,当我将其加载到手机上时,它工作得很好,但当我将其发布到野外时,我收到了崩溃报告,说:

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

    下面是调用堆栈的一部分:

    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)
    

    我以为主线程已经自动调用了prepare(),如果没有,为什么它对我来说很好,但对其他人却不行?

    2 回复  |  直到 14 年前
        1
  •  1
  •   cstack    14 年前

    我仍然不知道出了什么问题,但对于任何有同样问题的人来说,如果你把游戏分成菜单活动和游戏活动,效果会很好。让游戏活动返回游戏的菜单活动的分数,然后从菜单活动调用所有ScoreNinja内容。

        2
  •  0
  •   synic    14 年前

    我想您正在主线程之外创建处理程序。在中创建处理程序 onCreate 你的活动或类似的东西,肯定会在主线程中,然后你可以调用 handler.post(runnable) 在你的另一根线里面。