ScoreNinja вызывает java.lang.RuntimeException: невозможно создать обработчик внутри потока, который не вызвал Looper.prepare () - PullRequest
2 голосов
/ 09 апреля 2010

Я пытаюсь добавить 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 ]

1 голос
/ 28 мая 2010

Я до сих пор не уверен, что было не так, но для тех, у кого есть такая же проблема, это прекрасно работает, если вы разбиваете свою игру на меню Activity и игровое Activity. Пусть игровое действие вернет счет активности меню в игре, а затем вызовет все данные ScoreNinja из действия меню.

0 голосов
/ 09 апреля 2010

Я предполагаю, что вы создаете обработчик вне основного потока. Создайте обработчик в onCreate вашей деятельности или что-то подобное, что-то, что обязательно будет в главном потоке, а затем вы можете вызвать handler.post(runnable) в вашем другом потоке.

...