Запустите новый CountDownTimer внутри метода запуска

Я новичок в разработке Android, и я пытаюсь создать небольшую игру. У меня есть мой первый CountDownTimer, созданный конструктором в моем GameView подклассе SurfaceView.

Чтобы перейти на следующий уровень, я должен вызвать cancel() из CountDownTimer class, повторно адаптировать все элементы для следующего уровня и создать новый CountDownTimerснова. Я делаю это в run() моего класса GameView, который реализует Runnable.

Я читал информацию в Интернете, но в большинстве решений используется Activities, как я уже сказал, я работаю в подклассе SurfaceView.

Это ошибка, которую я получаю

E/AndroidRuntime: FATAL EXCEPTION: Thread-4
              Process: com.example.lucadigiammarino.biogame, PID: 3569
              java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                  at android.os.Handler.<init>(Handler.java:200)
                  at android.os.Handler.<init>(Handler.java:114)
                  at android.os.CountDownTimer$1.<init>(CountDownTimer.java:114)
                  at android.os.CountDownTimer.<init>(CountDownTimer.java:114)
                  at com.example.lucadigiammarino.biogame.GameCountDownTimer.<init>(GameCountDownTimer.java:0)
                  at com.example.lucadigiammarino.biogame.GameView.startTimer(GameView.java:135)
                  at com.example.lucadigiammarino.biogame.GameView.run(GameView.java:306)
                  at java.lang.Thread.run(Thread.java:761)

Заранее спасибо за ваше время


person ldg    schedule 27.11.2016    source источник
comment
Вы пытаетесь запустить некоторые функции, связанные с пользовательским интерфейсом, не в основном потоке.   -  person phnmnn    schedule 27.11.2016
comment
stackoverflow.com/questions/11086129/   -  person Roman Samoilenko    schedule 27.11.2016


Ответы (1)


Благодаря @Roman мне удалось решить мою проблему, ответ здесь для более подробного объяснения ---> runOnUiThread внутри представления

То, что я сделал, я просто создал другой Thread внутри моего run(), используя post(). Повторяю, что я в подклассе SurfaceView.

post(new Runnable() {
    @Override
    public void run() {
        myTimer.cancel;
        startTimer() //creates a new timer
    }
});

Надеюсь, это может быть полезно для кого-то еще в будущем!

person ldg    schedule 27.11.2016