Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android setVideoPath非法状态异常_Android_Android 5.1.1 Lollipop - Fatal编程技术网

Android setVideoPath非法状态异常

Android setVideoPath非法状态异常,android,android-5.1.1-lollipop,Android,Android 5.1.1 Lollipop,我正在无限循环地播放幻灯片。每隔“x”时间,我就会切换视频播放。首先停止视频,然后加载新视频。当我设置视频路径时,我的应用程序正在崩溃,错误是存在非法状态。它每使用几千次只发生一次,所以我无法复制它。也就是说,如果我在100台设备上让应用程序打开24小时,它将在一台设备上每天发生一次 runOnUiThread() { if (mVideoView!!.isPlaying) { mVideoView!!.stopPlayback() } mVideoVie

我正在无限循环地播放幻灯片。每隔“x”时间,我就会切换视频播放。首先停止视频,然后加载新视频。当我设置视频路径时,我的应用程序正在崩溃,错误是存在非法状态。它每使用几千次只发生一次,所以我无法复制它。也就是说,如果我在100台设备上让应用程序打开24小时,它将在一台设备上每天发生一次

runOnUiThread() {
    if (mVideoView!!.isPlaying) {
        mVideoView!!.stopPlayback()
    }
    mVideoView!!.setVideoPath(filePath)
    mVideoView!!.setOnErrorListener { mp, what, extra ->
            LOG.e("Media player error: $what extra: $extra")
            // Something's wrong, try again
            slideshowHandler.removeCallbacksAndMessages(null)
            slideshowHandler.postDelayed(slideshowRunner, 0)
            true
        }
        if (startTime > 0) {
            mVideoView!!.seekTo(startTime)
        }
        mVideoView!!.start()
    }
}


java.lang.IllegalStateException
    at android.media.MediaPlayer.prepareAsync(Native Method)
    at android.widget.VideoView.openVideo(VideoView.java:356)
    at android.widget.VideoView.setVideoURI(VideoView.java:265)
    at android.widget.VideoView.setVideoURI(VideoView.java:248)
    at android.widget.VideoView.setVideoPath(VideoView.java:239)
你有什么想法吗?什么状态是无效的?我做事的顺序不对吗

我找不到任何类似的问题。该应用程序正在运行棒棒糖5.1(必须)


编辑:我正在使用try/catch修复此问题。Android中似乎有一些潜在的错误导致了这种情况。

在停止播放工作完成和随后的
setVideoPath()
调用之间可能存在时间问题<代码>视频视图专为琐碎的用例设计&mdash;您可能需要使用
MediaPlayer
和您自己的
Surface
(例如
SurfaceView
),以便从媒体播放中获取更多事件。或者,切换到ExoPlayer。这两者之间的唯一区别似乎是videoview是媒体播放器和surface view的组合:是的,但是
videoview
不会公开其
MediaPlayer
,更重要的是,它的所有侦听器和相关事件。当你说获取更多事件时,您的意思是更多错误通知?可能是在停止播放工作完成之前,您无法调用
setVideoPath()
,并且该工作可能是异步的。我希望在安全的情况下,您可以将
MediaPlayer
重新用于另一个视频时,会触发一个事件,并且您可以侦听该事件并将
setVideoPath()
调用推迟到该点。