После воспроизведения песни, когда я нажимаю кнопку следующей песни несколько раз, приложение вылетает и logcat показывает ошибку в ветке Update_SeekBar - PullRequest
0 голосов
/ 06 июля 2019

Я хочу создать музыкальный проигрыватель.Все работает нормально, но когда я нажимаю кнопку следующей или предыдущей песни несколько раз (от 5 до 6 раз), приложение вылетает.Logcat выдает ошибку в строке: currentPosition = mediaPlayer.currentPosition

updateSeekBar = Thread(Runnable {
            var totalDuration = mediaPlayer.duration
            var currentPosition =  0

            while (currentPosition < totalDuration) {
                try {
                    sleep(500)
                    currentPosition = mediaPlayer.currentPosition
                    songSeekBar.setProgress(currentPosition)
                }
                catch (e : InterruptedException){
                    e.printStackTrace()
                }
            }
        })

Ошибка Logcat msg: 2019-07-06 08: 30: 01.779 9951-10013 / com.example.musicplayer E /AndroidRuntime: FATAL EXCEPTION: Thread-7 Процесс: com.example.musicplayer, PID: 9951 java.lang.IllegalStateException в android.media.MediaPlayer.getCurrentPosition (собственный метод) в com.example.musicplayer.PlayMusicActivity $ onCreate $PlayMusicActivity.kt: 68) на java.lang.Thread.run (Thread.java:764)

Примечание. Строка # 68 = currentPosition = mediaPlayer.currentPosition

1 Ответ

0 голосов
/ 06 июля 2019

Вы получаете доступ к пользовательскому интерфейсу seekbar из потока без пользовательского интерфейса. Так что попробуйте с кодом ниже.

    updateSeekBar = Thread(Runnable {
        var totalDuration = mediaPlayer.duration
        var currentPosition =  0

        while (currentPosition < totalDuration) {
            try {
//                  Add UI thread here
                runOnUiThread(Runnable {
                    currentPosition = mediaPlayer.currentPosition
                    songSeekBar.setProgress(currentPosition)
                });
                sleep(500)
            }
            catch (e : InterruptedException){
                e.printStackTrace()
            }
        }
    })  
...