приложение вылетает при создании из-за таймера

У меня проблема со сбоем приложения, когда я пробую этот код? Я хочу, чтобы я постоянно проверял, воспроизводится ли MediaPlayer (MP), и если это так, я хочу, чтобы текст читал «Сейчас воспроизводится». Но если он не воспроизводится, я хочу, чтобы он читал «Не воспроизводится».

Я не получаю никаких предупреждений от Eclipse, но все же, когда я его экспортирую, он падает при загрузке. Я знаю, что кода для установки TextView там нет, но проблема не в этом. (я думаю) Если есть другой способ сделать это, я был бы рад толчку в правильном направлении.

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
                      //The Timer
                                Thread playingtimer = new Thread (){
                                    public void run() {
                                        try{
                                            int time = 1;
                                            while(time > 0) {
                                            sleep(100);

                                            if (MP.isPlaying()){ 
                                //set the TextView here "Now Playing"
                                            }
                                            else 
                                //set the TextView to "NOT Playing"
                                            }
                                        } 
                                        catch (InterruptedException e) {
                                        e.printStackTrace();
                                        }
                                        finally{

                                        }
                                    }
                                };
                                playingtimer.start();

person ZimZux    schedule 01.10.2013    source источник
comment
Опубликуйте логкэт. Без него довольно сложно диагностировать аварию.   -  person Prmths    schedule 01.10.2013


Ответы (2)


Я знаю, что кода для установки TextView там нет, но проблема не в этом. ( Я думаю )

Именно в этом проблема. Вы пытаетесь обновить View из фона Thread. Вы должны использовать runOnUiThread(), Handler или AsyncTask для обновления файла UI.

Эти ответы говорят об обработчике и асинхронной задаче

Пример runOnUiThread

person codeMagic    schedule 01.10.2013
comment
Какие из них легче всего выучить? - person ZimZux; 01.10.2013
comment
Мне нравится AsyncTask, но runOnUiThread() тоже довольно легко - person codeMagic; 01.10.2013
comment
Я разместил пару ссылок на примеры, чтобы вы могли видеть, с чем вы хотите работать. - person codeMagic; 01.10.2013
comment
большое спасибо... я боролся с этим последние пару часов.. - person ZimZux; 01.10.2013

Проблема здесь в том, что если вы пытаетесь изменить свой TextView с этого таймера, он выйдет из строя, потому что одно из самых важных правил в Android заключается в том, что вы просто не можете изменять какие-либо представления из любого потока, кроме основного, и вы пытаетесь измените его из своего пользовательского рабочего потока, чтобы заставить его работать, оберните код, изменяющий представление, в метод runOnUIThread или придумайте свой собственный механизм обработчика для запуска этого кода в основном потоке.

Надеюсь это поможет.

С Уважением!

person Martin Cazares    schedule 01.10.2013